无法在导入的函数上运行模拟程序

时间:2019-06-07 05:08:19

标签: javascript node.js

以下函数从其实际文件中导入时不会模拟,但是在复制到测试文件中然后直接引用时才起作用:

const testF = () => {
  return fetch(null, {
    body : JSON.stringify(4)
  })
    .then(res => res.json());
};

exports.testF = testF;

在我的测试文件中,我有这个:

global.fetch = require('jest-fetch-mock');
const targetFile = require("../targetFile.js");

test('testF', async () => {
  await fetch.mockResponseOnce(JSON.stringify(2));

  await targetFile.testF().then(jsonData => {
    expect(jsonData).toEqual(2)
  });
});

也尝试通过这种方式进行设置并重新启动测试运行程序:

// package.json
  "jest": {
    "setupFiles": [ "./setupJest.js" ]
  }


// setupJest.js
global.fetch = require('jest-fetch-mock');


// seen in jest/terminal
TypeError: Cannot read property 'Symbol(Request internals)' of null

  225 | 
  226 | const testF = () => {
> 227 |   return fetch(null, {
      |          ^
  228 |     body : JSON.stringify(4)
  229 |   })
  230 |     .then(res => res.json());

任何人都知道哪里出了问题以及如何获取导入的函数以使用模拟的global.fetch吗?

1 个答案:

答案 0 :(得分:0)

通过在目标文件中输入以下内容来解决:

if (typeof window !== 'undefined') {
  fetch = window.fetch;
} else { fetch = global.fetch }

const diffFileFetch = () => {
  return fetch();
};

现在抓取的范围已正确用于生产/测试。

然后在测试运行器文件中:

global.fetch = jest.fn(() => Promise.resolve('test value'));

test('diffFileFetch', () => {
  targetFile.diffFileFetch()
    .then(data => {
      expect(data).toEqual('test value');
    });
});