我很难理解我做错了什么。
我有一个JS类:
export default class A {
constructor(repository) {
this._repository = repository;
}
async process(date) {
// ...
this._repository.writeToTable(entry);
}
}
我试图编写一个使用sinon.mock
这是我到目前为止所做的:
describe('A', () => {
describe('#process(date)', () => {
it('should work', async () => {
const repository = { writeToTable: () => {} };
const mock = sinon.mock(repository);
const a = new A(repository);
await a.process('2017-06-16');
mock.expects('writeToTable').once();
mock.verify();
});
});
});
但总是说不出来
ExpectationError: Expected writeToTable([...]) once (never called)
我已经检查过(添加了一个console.log),它正在调用我在测试中定义的对象。
答案 0 :(得分:1)
我在本地运行并阅读sinonjs.org上的文档,您似乎正在做正确的事。
我尝试使用spy
重新编写您的示例,最后得到类似的内容以获得通过测试:
import sinon from "sinon";
import { expect } from "chai";
import A from "./index.js";
describe("A", () => {
describe("#process(date)", () => {
it("should work", async () => {
const repository = { writeToTable: sinon.spy() };
const a = new A(repository);
await a.process("2017-06-16");
expect(repository.writeToTable.calledOnce).to.be.true;
});
});
});