如何用茉莉花测试模拟函数的回调?

问题描述 投票:0回答:1

我正在使用的第三方服务的方法将回调作为第二个参数。当从服务器收到响应时,将在现实生活中执行此回调。

我想模拟用于单元测试的第三方方法,并向回调提供不同的响应参数,以确保其逻辑正确执行。例如,当状态不是'success'时检查诺言是否被拒绝,或者在成功时仅返回保存的记录,而不是整个响应。

我正在使用茉莉进行测试。

function save() {
  var deferred = $q.defer();

  thirdPartyService.doSave(record, function callback(response) {
    // How to test the code in here when doSave is mocked?
    if(response.status === 'success') {
      deferred.resolve(response.savedRecord);
    } else {
      deferred.reject(response);
    }
  });

  return deferred.promise;
}

我想运行的测试示例:

// Setup
const successResponse = {
  status: 'success',
  savedRecord: { Id: 'test-id' }
};
// Somehow config the mocked thirdParty.doSave() to use successResponse for the callback.

// Test
myService.save()
  .then(function(response) {
    expect(response.Id).toBe('test-id');
  });;
jasmine
1个回答
0
投票

您可以使用thirdParty.doSave模拟spyOn.and.callFake

const successResponse = {
  status: 'success',
  savedRecord: { Id: 'test-id' }
};
spyOn(thirdParty, 'doSave').and.callFake((record, callback) => callback(successResponse));
© www.soinside.com 2019 - 2024. All rights reserved.