我有一个方法需要使用sinon来存根,所以第一次调用它时会返回一个值,然后在第二次调用时返回一个不同的值。但是目前只有第一个值被返回。我的代码是在Typescript中使用Sinon和Bluebird(promises)。不能从一个sinon存根中返回多个值
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
有没有人知道我在做什么错我的根?
注意:对于不熟悉蓝鸟/承诺的人,在方法then(function(value){}, function(error){})
中,第一个函数处理如果承诺被解决会发生什么,第二个函数处理如果承诺被拒绝会发生什么。
谢谢。问题是,在我的代码中,我做了“let promise = MyService.method()...”,然后完成了诺言。当我删除它的工作。 – annedroiid