【发布时间】:2019-10-11 08:12:46
【问题描述】:
我正在使用 Typescript 和 hooks 开发一个 React 应用程序,并且我正在尝试使用 Enzyme 和 Jest 来测试功能组件。我无法使用 jest.spyOn 来测试我的组件中的方法。 jest.spyOn 方法无法正确解析并在悬停时显示以下消息
“'"validateBeforeSave"' 类型的参数不可分配给 '"context" 类型的参数 | “设置状态” | "强制更新" | “渲染” | "componentDidMount" | “应该组件更新” | “组件将卸载” | "componentDidCatch" | "getSnapshotBeforeUpdate" | ... 6 更多... | "UNSAFE_componentWillUpdate"'.ts(2345)"
我尝试将实例转换为“任何” -
const instance = wrapper.instance() as any;
这当然忽略了编译时的问题,但随后测试会抛出组件上不存在函数的运行时错误。
无法监视 validateBeforeSave 属性,因为它不是 功能;取而代之的是未定义
// Some function Component
const SomeComponent = (props: IMyComponentProps) => {
const { classes } = props;
// Component has state
const [count, setCount] = useState(0);
function validateBeforeSave(){
}
function handleClick() {
validateBeforeSave();
.
.
.
}
return (
<div>
<Button>
className="saveBtn"
onClick={handleClick}
</Button>
</div>
);
};
// Unit test
describe('SomeComponent' () => {
it('validates model on button click', () => {
const wrapper = mount(
<MuiThemeProvider theme={theme}>
<SomeComponent/>
</MuiThemeProvider>,
);
const instance = wrapper.instance();
const spy = jest.spyOn(instance, "validateBeforeSave");
wrapper
.find('.saveBtn')
.at(0)
.simulate('click');
expect(spy).toHaveBeenCalledTimes(1);
});
}
我在这里缺少什么? spyOn 如何处理函数组件?
我使用 create-react-app 模板创建了应用程序,它具有测试包的这些依赖项
"devDependencies": {
"ts-jest": "^23.10.3",
"@types/jest": "24.0.9",
"@types/enzyme": "^3.9.1",
"@types/enzyme-adapter-react-16": "^1.0.2",
"enzyme": "^3.9.0",
"enzyme-adapter-react-16": "^1.11.2",
"enzyme-to-json": "^3.3.5",
}
【问题讨论】:
标签: reactjs typescript jestjs enzyme ts-jest