相关疑难解决方法(0)

如何使用Jest模拟JavaScript窗口对象?

我需要测试一个在浏览器中打开新选项卡的函数

  openStatementsReport(contactIds) {
    window.open(`a_url_${contactIds}`);
  }
Run Code Online (Sandbox Code Playgroud)

我想模拟窗口的open函数,这样我就可以验证正确的URL是否传递给open函数.

使用Jest,我不知道如何模仿窗口.我尝试使用模拟函数设置window.open但这种方式不起作用.以下是测试用例

it('correct url is called', () => {
  window.open = jest.fn();
  statementService.openStatementsReport(111);
  expect(window.open).toBeCalled();
});
Run Code Online (Sandbox Code Playgroud)

但它给了我错误

expect(jest.fn())[.not].toBeCalled()

    jest.fn() value must be a mock function or spy.
    Received:
      function: [Function anonymous]
Run Code Online (Sandbox Code Playgroud)

我应该怎么做测试用例?任何建议或提示表示赞赏

javascript mocking jestjs

60
推荐指数
10
解决办法
6万
查看次数

在开玩笑中嘲笑global.window

我有一个在节点和浏览器上运行的函数,我想用jest测试:

const myFn = () => {
  if(typeof window !== 'object'){
     return 1;
  }
  return 2;
}
Run Code Online (Sandbox Code Playgroud)

我如何能够将全局窗口对象设置为undefined,以测试节点分支,并返回1.

例如

  test('myTest', ()=> {
      global.window = undefined;
      expect(myFn()).toEqual(1); // result: 2
  });
Run Code Online (Sandbox Code Playgroud)

我试过这里的建议没有成功: 在Jest中模拟全局变量

javascript reactjs jestjs

11
推荐指数
1
解决办法
6894
查看次数

标签 统计

javascript ×2

jestjs ×2

mocking ×1

reactjs ×1