如何使用sinon / mocha模拟npm模块

时间:2019-09-01 21:28:32

标签: node.js mocking mocha sinon sinon-chai

我正在尝试测试一个调用模块cors的函数。我想测试cors是否会被调用。为此,我必须将其存根/模拟。

这是功能 cors.js

const cors = require("cors");

const setCors = () => cors({origin: 'http//localhost:3000'});
module.exports = { setCors }

我测试这种功能的想法就像

cors.test.js

  describe("setCors", () => {
    it("should call cors", () => {
      sinon.stub(cors)

      setCors();
      expect(cors).to.have.been.calledOnce;

    });
  });

有什么想法要对npm模块存根吗?

1 个答案:

答案 0 :(得分:1)

您可以使用mock-requireproxyquire

带有mock-require

的示例
const mock = require('mock-require')
const sinon = require('sinon')

describe("setCors", () => {
  it("should call cors", () => {
    const corsSpy = sinon.spy();
    mock('cors', corsSpy);

    // Here you might want to reRequire setCors since the dependancy cors is cached by require
    // setCors = mock.reRequire('./setCors');

    setCors();
    expect(corsSpy).to.have.been.calledOnce;
    // corsSpy.callCount should be 1 here

    // Remove the mock
    mock.stop('cors');
  });
});

如果需要,您可以在describe的顶部定义模拟并在每个测试之间使用corsSpy.reset()重设间谍,而不是为每个测试模拟并停止模拟。