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