首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有样式组件和主题的react-test-renderer (React Native)

使用带有样式组件和主题的react-test-renderer (React Native)
EN

Stack Overflow用户
提问于 2020-10-13 21:55:38
回答 1查看 564关注 0票数 0

我有一个使用styled-systemstyled-component,它工作得很好,但是当我去测试这个组件时,我似乎无法让它从主题中正确地填充样式。

这很奇怪,因为如果我应用像marginLeft={1}这样的道具,这个样式可以从Theme.space属性正确转换。这是color系统的一个具体问题吗?

文本组件

代码语言:javascript
复制
import React from 'react';
import styled from 'styled-components/native';
import {
  color,
  space,
  typography,
  variant,
  system,
} from 'styled-system';

const textDecoration = system({ textDecoration: true });
const textDecorationColor = system({ textDecorationColor: true });
const textVariant = variant({ scale: 'text' });
const Text = styled.Text`
  ${textVariant}
  ${textDecoration}
  ${textDecorationColor}
  ${color} <-- using color system
  ${space}
  ${typography}
`;

export default Text;

测试

代码语言:javascript
复制
import React from 'react';
import renderer from 'react-test-renderer';
import { ThemeProvider } from 'styled-components';

import Text from '../src/atoms/Text';
import Theme from '../src/theme';

test('Text is referencing Theme (colors)', () => {
  console.log('Theme navy -->', Theme.colors.navy); // Theme navy --> #004175

  const tree = renderer
    .create(
      <ThemeProvider theme={Theme}>
        <Text color="navy" />
      </ThemeProvider>,
    ).toJSON();
  const [styles] = tree.props?.style || {};

  console.log('Post-render color -->', styles.color); // Post-render color --> navy

  expect(styles.color).toBe(Theme.colors.navy);
});
代码语言:javascript
复制
npm run test
...
 ● Text is referencing Theme (colors)

    expect(received).toBe(expected) // Object.is equality

    Expected: "#004175"
    Received: "navy"
...

通常我会使用color="primary"进行测试,它是#3592fb,但是我得到了一个错误,指出primary不是样式属性color的有效值,这告诉我ThemeProvider不能正常工作。

在这方面的任何帮助都将非常感谢!谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-10-13 23:17:28

在使用了一些further googling之后,我发现我应该使用styled-components/native中的ThemeProvider

代码语言:javascript
复制
// change
import { ThemeProvider } from 'styled-components';
// to
import { ThemeProvider } from 'styled-components/native';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64336614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档