簡體   English   中英

如何具有不同的偽函數,要求對Jasmine間諜進行多次調用

[英]How to have different fake functions called for multiple calls on a Jasmine spy

說我正在監視這樣的方法:

spyOn(util, "foo").andCallFake(function() {
    //some code
});

被測函數多次調用util.foo。

間諜可能為每個下一次調用調用不同的偽函數嗎?

問題類似於此問題: 如何對Jasmine間諜進行多次調用具有不同的返回值,但我需要調用一個函數而不是返回值。 如果沒有本機的方法,如何“重置”間諜以解決問題?

為什么不圍繞它包裝一個匿名函數:

var count=0;
event.on(function(){
count++;
if(count==1){
//at first
firstfunc();
}else{
//the rest
secondfunc();
}
});

這是將間諜用於較早地偽造方法之后,將間諜路由到第二次/以后進行實際調用的方法。

我覺得這說明了您一直在努力實現的目標。 擺弄看看它在行動

var util = {
  foo: function() {
    console.log("Foo has been called")
  }
}

someFunction = function() {
  console.log("lets call utils foo");
  util.foo();
  console.log("lets call utils foo one more time");
  util.foo();
  console.log("lets call utils foo one last time");
  util.foo();
}

describe("spec to util's foo multiple times", function() {
  it('test', function() {
    var self = this;
    self.resetSpy = function() {
      self.spyVar.and.callThrough();
    };
    self.spyVar = spyOn(util, 'foo').and.callFake(function(e) {
      console.log("Foo hasn't been called, instead a Fake method has been called")
      self.resetSpy();
    });
    someFunction();
    expect(util.foo).toHaveBeenCalled();
  });
});

筆記:

  • someFunction是一個會調用util.foo三次的函數。
  • 假設您要偽造一次,但接下來的兩個調用您想實際調用函數本身,那么我們可以最初將間諜設置為使用偽方法,但是對於第二次和第三次調用,我們將間諜重置為實際callThrough
  • self.resetSpy是我在第一個間諜調用之后調用的規范上的內部函數。
  • 有關重置間諜的更多信息在這里

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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