Javascript 酶不会';渲染、安装或浅层';组件,因为依赖项未定义
我正试图弄明白为什么我的测试无法运行。我有一个React功能组件,其中包含一个样式化组件,该组件使用自定义方法生成一个媒体查询,该查询将被导入css帮助文件。我收到一个Javascript 酶不会';渲染、安装或浅层';组件,因为依赖项未定义,javascript,reactjs,sinon,enzyme,styled-components,Javascript,Reactjs,Sinon,Enzyme,Styled Components,我正试图弄明白为什么我的测试无法运行。我有一个React功能组件,其中包含一个样式化组件,该组件使用自定义方法生成一个媒体查询,该查询将被导入css帮助文件。我收到一个类型错误:无法读取未定义的属性“medium”。这是我的密码 css/index.js 真菌成分 从“css”导入{media}; 常量MyComponent=({图标、标题、说明})=>( ... ); 导出默认MyComponent; const MyComponentContainer=styled.article` 最大宽
类型错误:无法读取未定义的属性“medium”
。这是我的密码
css/index.js
真菌成分
从“css”导入{media};
常量MyComponent=({图标、标题、说明})=>(
...
);
导出默认MyComponent;
const MyComponentContainer=styled.article`
最大宽度:300px;
宽度:100%;
边框:1px实心#000;
${media.media`
填充:0 25px;
`}
${media.large`
最大宽度:350px;
`}
`;
我的测试文件
从“React”导入React;
从“酶”导入{shall};
从“组件/MyComponent”导入MyComponent;
描述(“”,()=>{
它('应该匹配快照',()=>{
常量捕捉=浅();
expect(snap).toMatchSnapshot();
});
});
我是一个新的反应测试,并不真正理解如何嘲笑该功能或告诉jest忽略它
我将react 16+与所需的酶适配器和
jest样式的组件
test插件一起使用。如果其他人遇到这个问题,我找到了答案,它解释了很多关于测试的性质
当您进行测试时,您一次只想测试一个组件或操作的功能(单元测试)。通过测试一个拉入另一个依赖项的组件,我实际上是在一次测试两件事情而没有意识到这一点
MyComponent
组件需要与media
标记的模板方法分开测试
在MyComponent
中,我不关心从媒体
标记模板方法返回的内容。我只关心调用了什么方法以及调用的参数
我可以为媒体
方法设置另一个单独的测试,以确保这些方法按预期运行,并单独测试它们
因此,在jest
中,您可以模拟模块导入
在我的测试文件中
从“React”导入React;
从“酶”导入{shall};
从“组件”导入MyComponent;
jest.mock('css',()=>({
媒体:{
small:jest.fn(),
中等:jest.fn(),
大:jest.fn(),
},
})
描述(',()=>{
它('应该匹配快照',()=>{
常量捕捉=浅();
expect(snap).toMatchSnapshot();
});
});
export const media = (function(){
const sizes = {
large: 996,
medium: 767,
small: 656,
};
return Object.keys(sizes).reduce((acc, label) => {
acc[label] = (...args) => css`
@media (min-width: ${sizes[label] / 16}em) {
${css(...args)}
}
`;
return acc;
}, {});
})();
import { media } from 'css';
const MyComponent = ({ icon, title, description }) => (
<MyComponentContainer>
...
</MyComponentContainer>
);
export default MyComponent;
const MyComponentContainer = styled.article`
max-width: 300px;
width: 100%;
border: 1px solid #000;
${media.medium`
padding: 0 25px;
`}
${media.large`
max-width: 350px;
`}
`;
import React from 'react';
import { shallow } from 'enzyme';
import MyComponent from 'components/MyComponent';
describe('<MyComponent />', () => {
it('should match the snapshot', () => {
const snap = shallow(<MyComponent />);
expect(snap).toMatchSnapshot();
});
});
import React from 'react';
import { shallow } from 'enzyme';
import MyComponent from 'components';
jest.mock('css', () => ({
media: {
small: jest.fn(),
medium: jest.fn(),
large: jest.fn(),
},
})
describe('<MyComponent />, () => {
it('should match snapshot', () => {
const snap = shallow(<MyComponent />);
expect(snap).toMatchSnapshot();
});
});