我正在升级React项目的依赖项。我将样式组件从1.4.4
升级到2.5.0-1
。我没想到任何重大变化,因为我读到样式组件v2是v1的替代品。
我没有在网络应用中看到任何重大更改,但我的测试用例已被破坏。
考虑以下,愚蠢和无用的测试。
test('does something', () => {
expect(true).toBe(true);
});
正如预期的那样,测试工作正常。但是,只要我尝试在测试文件中导入样式化组件,它就会失败。
我添加了以下导入。
import {Container} from './styled';
因此定义了Container样式组件:
export const Container = styled.div`
width: 80%;
display: flex;
flex-direction: column;
transition: opacity 0.25s ease-in-out;
`;
我收到以下错误:
Cannot create styled-component for component: [object Object]
现在,我无法理解发生了什么。为什么我不能导入样式组件?
修改
问题在于导入svg资产的样式组件。见下面的答案。
答案 0 :(得分:2)
一次评论出一个样式化的组件后,我发现问题出在使用svg资产的样式组件上。考虑以下样式组件
import Edit from 'assets/edit-icon.svg';
export const EditIcon = styled(Edit)`
transition: opacity 0.25s ease-in-out;
position: absolute;
opacity: 0;
z-index: 2;
&:hover {
transform: scale(1.05);
}
&:active {
transform: scale(0.93);
}
`;
现在,我们的单元测试无法将SVG资产导入为React Components(通过Webpack处理)。因此,我们需要通知我们的单元测试忽略SVG资产。
为此,我们需要配置jest。
"moduleNameMapper": {
"\\.(svg)$": "<rootDir>/test/__mocks__/svgMock.js"
}
在svgMock.js中
module.exports = '';
在我现有的设置中,我有
module.exports = {};
虽然这适用于styled-components-1.x但是它失败了&gt; = styled-components-2.x。
以下博客文章向我指出了答案:https://diessi.ca/blog/how-to-exclude-css-images-anything-from-unit-tests/