繁体   English   中英

如何使用Jest和Proxyquire存根模块?

[英]How do I stub a module with Jest and Proxyquire?

我想强制将node-fetch设置为存根,并且在使其工作时遇到了一些麻烦。 码:

const fetchMock = jest.fn();

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

setup.js

global.proxyquire = require('proxyquire');

package.json

"jest": {
    "automock": false,
    "globalSetup": "./test/__config.js",
    "setupFiles": [
      "./test/__setup.js"
    ]
  },

结果:

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

如何无法加载我之前加载两行的模块? proxyquire不是在此处使用的正确模块吗?

我在测试中已经将node-fetch设为模拟,但是当我在模块中运行该函数时(顶部为const fetch = require('node-fetch'); ),它将转到实际模块,而不是假货。 我试过使用像fetch-mock这样的fetch嘲讽库都没有用。

我最后做了一个模拟:

测试/__mocks__/node-fetch.js

'use strict';
const nodeFetch = jest.genMockFromModule('node-fetch');
module.exports = nodeFetch;

package.json:

 "jest": {
    "verbose": true,
    "automock": false,
    "globalSetup": "./test/__config.js",
    "coverageReporters": [
      "text-summary",
      "html"
    ],
    "roots": [
      "./test"
    ],
    "setupFiles": [
      "./test/__setup.js"
    ]
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM