我正在编写单元测试,并且有一个类似这样的模块文件:
#!/usr/bin/env node
const shelljs = require('shelljs');
const bulkUpdateDependencies = (outdatedPackages) => {
// some logic
return ({});
};
module.exports = bulkUpdateDependencies;
在测试文件中,我需要它,但是当我尝试这样做时:
const bulkUpdateDependencies = require('../src/bulk-update-dependencies');
bulkUpdateDependenciesStub = sandbox.stub(bulkUpdateDependencies);
bulkUpdateDependenciesStub.returns({});
我明白了:
bulkUpdateDependencies.returns不是函数
请告知我如何正确存根bulkUpdateDependencies
功能?
我想您想直接对独立函数进行存根。这是解决方案:
bulk-update-dependencies.js
:
const bulkUpdateDependencies = (outdatedPackages) => {
return {};
};
module.exports = bulkUpdateDependencies;
bulk-update-dependencies.spec.js
:
const sinon = require("sinon");
describe("59435659", () => {
let sandbox;
before(() => {
sandbox = sinon.createSandbox();
});
afterEach(() => {
sinon.restore();
});
it("should pass", () => {
const bulkUpdateDependenciesStub = sandbox.stub().returns("stubbed data");
require.cache[require.resolve("./bulk-update-dependencies.js")] = {
exports: bulkUpdateDependenciesStub,
};
const bulkUpdateDependencies = require("./bulk-update-dependencies.js");
const actual = bulkUpdateDependencies();
expect(actual).to.be.equal("stubbed data");
sinon.assert.calledOnce(bulkUpdateDependenciesStub);
});
});
带有覆盖率报告的单元测试结果:
59435659
✓ should pass
1 passing (7ms)
----------------------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------------------------------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
bulk-update-dependencies.spec.js | 100 | 100 | 100 | 100 | |
----------------------------------|----------|----------|----------|----------|-------------------|
源代码:https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/59435659