我正在使用的第三方服务方法将回调作为第二个参数。当从服务器收到响应时,将在现实生活中执行此回调。
我想模拟用于单元测试的第三方方法,并向回调提供不同的响应参数,以确保其逻辑正确执行。例如,当状态不是“成功”时检查承诺是否被拒绝,或者成功后仅返回保存的记录而不是整个响应。
我正在使用茉莉进行测试。
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');
});;
答案 0 :(得分:0)
您可以使用thirdParty.doSave
模拟spyOn.and.callFake
。
const successResponse = {
status: 'success',
savedRecord: { Id: 'test-id' }
};
spyOn(thirdParty, 'doSave').and.callFake((record, callback) => callback(successResponse));