我使用mocha,sinon和chai来运行一组测试。这是我正在测试的方法
fn.method().then(function(response) {
console.log(response)
test()
})
我已经删除了method
这样的
test = sinon.spy()
fn = { method: sinon.stub().resolves("hello") }
在我的测试中我有
expect(fn.method()).to.have.been.called
console.log("goodbye")
expect(test).to.have.been.called
我希望测试能够按顺序传递并打印“hello”和“goodbye”,但我看到的是expect(test).to.have.been.called
失败,而且我发现“hello”在“再见”之后被打印出来了。
在promise解决后调用test
的正确方法是什么?
答案 0 :(得分:1)
这是失败的,因为(大概)在你的两条线上的sinon .resolves
钩子中有足够的异步性
console.log("goodbye");
expect(test).to.have.been.called;
在测试方法的.then
块中的代码运行之前运行。 (我们知道它正在运行,因为我们看到控制台已被记录,但我们知道它必须在第二行expect
行之后运行。)
我会从你的期望中解开你的存根方法,可能是这样的:
// in test.js
fn.method().then(() => {
expect(test).to.have.been.called;
});