Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 预期spyOn函数将被调用为Jest_Reactjs_Typescript_React Native_Testing_Jestjs - Fatal编程技术网

Reactjs 预期spyOn函数将被调用为Jest

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

我目前正在尝试测试我创建的方法,并且if语句中的方法没有被调用。我完全不知所措。虽然我是新来的,但我也开玩笑,所以我肯定我错过了一些简单的东西

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);
  });
});