我想在angularjs中模拟用于单元测试的服务,
TranslationService.translate(args)
.then(function translated(value) {
//somecode
return;
})
.catch()
.done();
遵循以下答案: How do I mock a service that returns promise in Angularjs Jasmine unit test?
这就是我模仿它的过程:
TranslateServiceMock = {
translate: jasmine.createSpy('translate').and.callFake(function() {
var deferred = $q.defer();
deferred.resolve('Remote call result');
return deferred.promise;
})};
但是看来这仍然行不通,我猜是因为链接了“完成”和“捕获”方法,
这是我得到的错误:
TypeError: undefined is not a constructor (near '....done();...'
用尽所有可能的原因或解决方法的想法。
答案 0 :(得分:0)
如评论中所述,完成不是诺言对象的一部分。
我通过对已完成的回调进行存根来完成此工作:
beforeEach( function () {
module(myModule.name, function ($provide) {
// define a .done on the $q Promise
$provide.decorator('$q', function ($delegate) {
var Promise = $delegate.when().constructor;
Promise.prototype.done = angular.noop;
return $delegate;
});
$provide.factory('TranslationService', function ($q) {
var svc = jasmine.createSpyObj('TranslationService', ['translate']);
svc.translate.and.returnValue($q.when(''));
return svc;
});
});
});