我刚开始尝试使用sinon并尝试获取存根。我正在尝试测试一个接收请求对象的函数,从中获取一些属性,并将其传递给一个对外部服务发出get请求的类的实例。
前:
exports.getMyThings = (req) => {
const reqOpts = {
qs: req.query
};
return apiInstance.get(req.route, reqOpts);
};
apiInstance
在我导出getMyThings
函数的文件中实例化。
我正在尝试删除apiInstance.get
方法,以便我可以测试我的getMyThings
函数是否正常工作并传递正确的参数。
我尝试通过将类导入到我的测试文件中来编写存根,然后创建存根实例:
const MyClass = require('.../blahblah)
const apiInstance = sinon.createStubInstance(MyClass);
和
const apiInstance = new MyClass();
apiInstance.get = sinon.stub();
但在我的getMyThings
函数中,apiInstance.get
方法不是包装的方法 - 它是原始方法。包装的实例仅存在于我的测试中。这是有道理的,但我不知道如何解决它。任何想法都表示赞赏。
答案 0 :(得分:0)
您可以使用
const returnMe = () => 'sinon rocks!';
sinon.stub(apiInstance, 'get').callsFake(returnMe);
result = apiInstance.get();
// Do asssertion for result to equal to the returnMe();
希望有帮助。
答案 1 :(得分:0)
这是单元测试解决方案:
index.js
:
const MyClass = require("./api");
const apiInstance = new MyClass();
exports.getMyThings = (req) => {
const reqOpts = {
qs: req.query,
};
return apiInstance.get(req.route, reqOpts);
};
api.js
:
function MyClass() {}
MyClass.prototype.get = async function get(route, reqOpts) {
return "real data";
};
module.exports = MyClass;
index.test.js
:
const { getMyThings } = require("./");
const sinon = require("sinon");
const { expect } = require("chai");
const MyClass = require("./api");
describe("50726074", () => {
afterEach(() => {
sinon.restore();
});
it("should pass", async () => {
const getStub = sinon.stub(MyClass.prototype, "get").resolves("fake data");
const mReq = { route: "/api/thing", query: { id: "1" } };
const actual = await getMyThings(mReq);
expect(actual).to.be.equal("fake data");
sinon.assert.calledWith(getStub, "/api/thing", { qs: { id: "1" } });
});
});
带有覆盖率报告的单元测试结果:
50726074
✓ should pass
1 passing (37ms)
---------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---------------|----------|----------|----------|----------|-------------------|
All files | 95.24 | 100 | 83.33 | 95.24 | |
api.js | 66.67 | 100 | 50 | 66.67 | 3 |
index.js | 100 | 100 | 100 | 100 | |
index.test.js | 100 | 100 | 100 | 100 | |
---------------|----------|----------|----------|----------|-------------------|
源代码:https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/50726074