首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Jest和Proxyquire对模块进行存根?

如何使用Jest和Proxyquire对模块进行存根?
EN

Stack Overflow用户
提问于 2018-07-06 23:33:27
回答 1查看 2.8K关注 0票数 1

我想强迫node-fetch成为一个存根,我在让它工作上遇到了一些困难。代码:

代码语言:javascript
复制
const fetchMock = jest.fn();

const {
  getArticle 
} = require('../../sfpublish/api');
console.log('loaded api')
const A = global.proxyquire('../../sfpublish/api', {
  'node-fetch': fetchMock
});

setup.js

代码语言:javascript
复制
global.proxyquire = require('proxyquire');

package.json

代码语言:javascript
复制
"jest": {
    "automock": false,
    "globalSetup": "./test/__config.js",
    "setupFiles": [
      "./test/__setup.js"
    ]
  },

结果:

代码语言:javascript
复制
FAIL  test/sfpublish/api.test.js
  ● Test suite failed to run

    Cannot find module '../../sfpublish/api'

      23 | } = require('../../sfpublish/api');
      24 | console.log('loaded api')
    > 25 | const A = global.proxyquire('../../sfpublish/api', {
         |                  ^
      26 |   'node-fetch': fetchMock
      27 | });

它怎么可能没有加载模块,我刚才加载了2行?proxyquire不是这里使用的正确模块吗?

我已经让node-fetch在我的测试中成为一个模拟,但是当我在模块中运行这个函数(它的顶部有const fetch = require('node-fetch'); )时,它将进入真正的模块,而不是假的。我试过使用像fetch-mock这样的fetch模拟库,但没有效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-20 21:11:16

最后我在里面放了一个模拟:

测试/__mocks_/node-提取.

代码语言:javascript
复制
'use strict';
const nodeFetch = jest.genMockFromModule('node-fetch');
module.exports = nodeFetch;

package.json:

代码语言:javascript
复制
 "jest": {
    "verbose": true,
    "automock": false,
    "globalSetup": "./test/__config.js",
    "coverageReporters": [
      "text-summary",
      "html"
    ],
    "roots": [
      "./test"
    ],
    "setupFiles": [
      "./test/__setup.js"
    ]
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51218760

复制
相关文章

相似问题

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