【发布时间】:2020-02-14 05:00:24
【问题描述】:
使用 jest 和酶编写反应单元测试。在检查组件状态时,它会抛出错误“ReactWrapper::state() 只能在类组件上调用”。
import React from 'react';
import { mount } from 'enzyme';
import expect from 'expect';
import CustomerAdd from '../CustomerAdd'
import MUITheme from '../../../../Utilities/MUITheme';
import { ThemeProvider } from '@material-ui/styles';
describe('<CustomerAdd />', () => {
const wrapper = mount(
<ThemeProvider theme={MUITheme}>
<CustomerAdd {...mockProps}></CustomerAdd>
</ThemeProvider>
);
test('something', () => {
expect(wrapper.find(CustomerAdd).state('addNewOnSubmit')).toEqual(true);
});
});
在上面的代码中,CustomerAdd 组件是类组件。我的代码没有什么问题。任何人都可以帮我解决这个问题。提前致谢。
【问题讨论】:
-
很难确定。检查您的导入/导出。我的意思是默认导出可以是基于类的组件的包装,而您需要使用命名导出。 PS无论如何,你最好不要反对
state(),测试变得脆弱。 -
我认为在基于类的组件中使用用作包装器的功能组件时会出现问题。有什么解决办法吗?
-
如何声明的?
-
ThemeProvider 是 Material ui ThemeProvider 组件。它是一个功能组件。如果我从 CustomerAdd 中删除这个和相应的依赖项。它工作正常。但我需要带有 ThemeProvider 的 CustomerAdd
-
'../CustomerAdd'的默认导出是什么样的?
标签: reactjs unit-testing jestjs material-ui enzyme