簡體   English   中英

使用Jasmine監視異步功能

[英]Spying on asynchronous functions with jasmine

我正在使用茉莉花節點來測試我的服務器。 我想在用戶類中偽造/繞過一些與驗證相關的代碼。 所以我會成立這樣的間諜-

var user = {
  email: 'email@email.com',
  password: 'password'
}

spyOn(User, 'validateFields').andReturn(user);

但是validateFields函數是異步的...

User.prototype.validateFields = function(user, callback) {

  // validate the user fields

  callback(err, validatedUser);
}

所以我實際上需要這樣的東西來偽造回調而不是返回-

var user = {
  email: 'email@email.com',
  password: 'password'
}

spyOn(User, 'validateFields').andCallback(null, user);

茉莉花有可能發生這種情況嗎?

有兩種方法。 首先,您可以進行監視,然后獲取用於第一次調用間諜的參數,然后使用模擬數據調用此函數:

spyOn(User, 'validateFields')
//run your code
User.validateFields.mostRecentCall.args[1](errorMock, userMock)

另一種方法是使用sinonJS 存根

sinon.stub(User, 'validateFields').callsArgWith(1, errorMock, userMock);

這將立即使用模擬數據調用回調函數。

您可以傳入回調函數,然后詢問是否已調用此函數。

對不起,異步4年延遲響應,但我一直只是想知道如何解決類似的問題,想通了,我可以結合茉莉done回調and.callFake間諜法。 考慮下面的抽象樣本:

describe('The delayed callback function', function(){

  it('should be asynchronously called',function(done){
    var mock = jasmine.createSpy('mock');
    mock.and.callFake(function(){
      expect(mock).toHaveBeenCalled();
      done();
    });
    delayed(mock);
  });

});

function delayed(callback){
  setTimeout(function(){
    callback();
  },2000);
}

暫無
暫無

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

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