Reactjs 预期spyOn函数将被调用为Jest
我目前正在尝试测试我创建的方法,并且if语句中的方法没有被调用。我完全不知所措。虽然我是新来的,但我也开玩笑,所以我肯定我错过了一些简单的东西Reactjs 预期spyOn函数将被调用为Jest,reactjs,typescript,react-native,testing,jestjs,Reactjs,Typescript,React Native,Testing,Jestjs,我目前正在尝试测试我创建的方法,并且if语句中的方法没有被调用。我完全不知所措。虽然我是新来的,但我也开玩笑,所以我肯定我错过了一些简单的东西 description('isSingleScreen',()=>{ 在每个之前(()=>{ 开玩笑。clearAllMocks(); jest.spyOn(utilMethods,'isDualScreen').mockReturnValue(true); }); 它('自动筛选',()=>{ //安排 const singleScreenAddSp
description('isSingleScreen',()=>{
在每个之前(()=>{
开玩笑。clearAllMocks();
jest.spyOn(utilMethods,'isDualScreen').mockReturnValue(true);
});
它('自动筛选',()=>{
//安排
const singleScreenAddSpy=jest.spyOn(
单屏幕方法,
“singleScreenAdd”
);
const dualScreenAddSpy=jest.spyOn(dualScreenMethods,'dualScreenAdd');
//表演
utilMethods.autoscreenad({});
//断言
期望(singleScreenAddSpy).toBeCalledTimes(0);
expect(dualScreenAddSpy).toBeCalled();
期望(dualScreenAddSpy).等待调用时间(1);
});
});代码>对于包含调用同一模块内其他函数的函数的模块,您可以如何测试该模块有一个限制。在那篇文章中,几乎没有解决这个问题的方法,所以我建议在深入研究我的粗略实现之前先看一看,因为它可能无法100%地处理您的代码结构
工作示例:
乌提尔斯
从原始版本稍作修改,因此您可能需要根据需要在util模块中模拟它
const isDualScreen = () => {
return window.width > 1000 ? true : false;
};
const autoScreenAdd = element => {
if (utilMethods.isDualScreen()) {
utilMethods.dualScreenAdd(element);
} else {
utilMethods.singleScreenAdd(element);
}
};
const dualScreenAdd = element => {
return element;
};
const singleScreenAdd = element => {
return element;
};
// This is important, it allows you to mock the functions properly in your tests.
// Use this same structure in your singleScreenMethods and dualScreenMethods modules
const utilMethods = {
singleScreenAdd,
dualScreenAdd,
autoScreenAdd,
isDualScreen
};
export default utilMethods;
测试示例
我有,但不幸的是,它返回相同的结果。作为一种最佳实践,我会记住这一点:)@keil用这些发现和codesandbox上的一个工作示例更新了我的答案,希望能有所帮助!我想是的
import utilMethods from "./utils";
describe("isSingleScreen", () => {
beforeEach(() => {
jest.clearAllMocks();
jest.spyOn(utilMethods, "isDualScreen").mockReturnValue(true);
});
it("autoScreenAdd", () => {
// Arrange
const singleScreenAddSpy = jest.spyOn(utilMethods, "singleScreenAdd");
const dualScreenAddSpy = jest.spyOn(utilMethods, "dualScreenAdd");
// Act
utilMethods.autoScreenAdd({});
// Assert
expect(singleScreenAddSpy).toHaveBeenCalledTimes(0);
expect(dualScreenAddSpy).toHaveBeenCalledTimes(1);
});
});