[英]Sinon stub an axios post, the return value is a undefined and can't be resolved
[英]Can't return more than one value from a sinon stub
我有一個想使用sinon進行存根的方法,以便在第一次調用它時會返回一個值,然后在第二次調用時返回一個不同的值。 但是,當前僅返回第一個值。 我的代碼在Typescript中,並使用Sinon和Bluebird(承諾)。
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){})
,第一個函數處理承諾被解決時發生的事情,第二個函數處理承諾在發生時發生的事情被拒絕了。
我認為您的用法可能是正確的,但相關性搞砸了。 由於以下測試:
我嘗試了您的示例(為了簡化js,因為僅從es6 / typescript導入了語句),並對其進行了少許修改即可按預期工作。
因此,也許從工作到損壞的整個過程中省去了一步,就可以告訴您哪個組件發生了故障。
以下代碼使用Node v6.6中的本機Promises,其中value.value()替換為簡單的value,因為字符串不包含方法'value'
let sinon = require('sinon')
let MyService = { method() {}}
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)
}, function (error) {
console.log("error 1: " + error)
})
MyService.method().then(function (value) {
console.log("success 2: " + value)
}, function (error) {
console.log("error 2: " + error)
})
回報
>node sinon.js
error 1: rejected
success 2: resolved
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.