如何使用 sinon/mocha 模拟 npm 模块
How to mock npm module with sinon/mocha
我正在尝试测试调用模块 cors
的函数。我想测试 cors
是否会被调用。为此,我必须 stub/mock 它。
这是函数
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 模块吗?
您可以使用mock-require
or proxyquire
示例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');
});
});
如果您愿意,可以在每个测试之间使用 corsSpy.reset()
在 describe 之上定义模拟并重置间谍,而不是为每个测试模拟和停止模拟。
我正在尝试测试调用模块 cors
的函数。我想测试 cors
是否会被调用。为此,我必须 stub/mock 它。
这是函数 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 模块吗?
您可以使用mock-require
or proxyquire
示例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');
});
});
如果您愿意,可以在每个测试之间使用 corsSpy.reset()
在 describe 之上定义模拟并重置间谍,而不是为每个测试模拟和停止模拟。