【发布时间】:2017-02-19 15:08:26
【问题描述】:
我有一个方法,我想使用 sinon 来存根,以便第一次调用它时返回一个值,然后在第二次调用时返回一个不同的值。然而,目前只返回第一个值。我的代码在 Typescript 中,使用了 Sinon 和 Bluebird(promises)。
import sinon = require('sinon')
import * as MyService from "../main/Service"
import * as Promise from "bluebird"
it("test things", function(done) {
let serviceStub = sinon.stub(MyService, 'method')
serviceStub.onFirstCall().returns(Promise.reject("rejected"))
.onSecondCall().returns(Promise.resolve("resolved"))
MyService.method().then(function(value) {
console.log("success 1: "+value.value())
}, function(error) {
console.log("error 1: "+error)
})
MyService.method().then(function(value) {
console.log("success 2: "+value.value())
}, function(error) {
console.log("error 2: "+error)
})
done()
})
我想我一定是在存根上做错了,因为这是我第一次使用 sinon。如果它返回Promise.reject("rejected"),然后返回Promise.resolve("resolved"),正如我所期望的那样,它将具有以下输出。
error 1: rejected
success 2: resolved
但是它两次都打印出相同的错误,所以onSecondCall() 方法不起作用。我给它的第一个值Promise.reject("rejected"),在调用该方法时都会返回。
error 1: rejected
error 2: rejected
有人知道我的存根做错了什么吗?
注意:对于不熟悉 bluebird/promises 的任何人,在 then(function(value){}, function(error){}) 方法中,第一个函数处理如果 promise 被解决会发生什么,第二个函数处理如果 promise 被拒绝会发生什么。
【问题讨论】:
标签: javascript typescript bluebird sinon