我有一个使用styled-system的styled-component,它工作得很好,但是当我去测试这个组件时,我似乎无法让它从主题中正确地填充样式。
这很奇怪,因为如果我应用像marginLeft={1}这样的道具,这个样式可以从Theme.space属性正确转换。这是color系统的一个具体问题吗?
文本组件
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;测试
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);
});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不能正常工作。
在这方面的任何帮助都将非常感谢!谢谢
发布于 2020-10-13 23:17:28
在使用了一些further googling之后,我发现我应该使用styled-components/native中的ThemeProvider
// change
import { ThemeProvider } from 'styled-components';
// to
import { ThemeProvider } from 'styled-components/native';https://stackoverflow.com/questions/64336614
复制相似问题