【发布时间】:2017-06-16 13:53:45
【问题描述】:
我很难理解我做错了什么。
我有一个这样的 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),它正在调用我在测试中定义的对象。
【问题讨论】:
-
我对 ES2015 的 async/await 结构不是很熟悉,但是在 ES5 中,您需要向测试函数添加一个参数回调函数,该函数将在您的测试完成后调用。这是隐含的吗?或者,我猜如果将
async放在函数前面意味着返回一个 Promise,那么这应该可以工作,因为 Mocha 支持向测试函数返回 Promise。
标签: javascript unit-testing mocking sinon