簡體   English   中英

從正弦樁不能返回多個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM