首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在导入的函数上运行模拟时出现问题

在导入的函数上运行模拟时出现问题
EN

Stack Overflow用户
提问于 2019-06-07 13:08:19
回答 1查看 168关注 0票数 0

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

代码语言:javascript
复制
const testF = () => {
  return fetch(null, {
    body : JSON.stringify(4)
  })
    .then(res => res.json());
};

exports.testF = testF;

在我的测试文件中,我有以下内容:

代码语言:javascript
复制
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)
  });
});

我也尝试这样设置并重新启动测试运行器:

代码语言:javascript
复制
// 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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-08 13:19:27

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

代码语言:javascript
复制
if (typeof window !== 'undefined') {
  fetch = window.fetch;
} else { fetch = global.fetch }

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

现在,为了生产/测试,fetch的作用域是正确的。

然后在test runner文件中:

代码语言:javascript
复制
global.fetch = jest.fn(() => Promise.resolve('test value'));

test('diffFileFetch', () => {
  targetFile.diffFileFetch()
    .then(data => {
      expect(data).toEqual('test value');
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56488253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档