【发布时间】:2016-10-05 14:48:34
【问题描述】:
我有一个ngResourceMockFactory,看起来像这样:
(function() {
'use strict';
angular.module('app')
.factory('NgResourceMock', ngResourceMockFactory)
;
ngResourceMockFactory.$inject = [];
function ngResourceMockFactory() {
function NgResourceMock() {
var context = this;
context.$promise.then = function() {
context.prototype.$promise.then.apply(context, arguments);
};
context.$promise.finally = function() {
context.prototype.$promise.finally.apply(context, arguments);
};
}
NgResourceMock.prototype.$promise = {
then: function(onSuccess, onError) {
this.$promise.onSuccess = onSuccess;
this.$promise.onError = onError;
},
finally: function(onComplete) {
this.$promise.onComplete = onComplete;
}
};
return NgResourceMock;
}
})();
我在beforeEach 中将其注入到我的测试中,如下所示:
beforeEach(inject(function(NgResourceMock) {
ngResourceMock = new NgResourceMock();
}));
然后我这样使用它:
describe('initiateWorkflow function', function() {
beforeEach(function() {
vm.player = {id: 123};
spyOn(dataService, 'initiateWorkflow').and.returnValue(ngResourceMock);
vm.initiateWorkflow();
});
it('should call dataService.initiateWorkflow', function() {
expect(dataService.initiateWorkflow).toHaveBeenCalledWith({playerId: vm.player.id}, {});
});
});
但我一直看到以下错误:
TypeError: 'undefined' is not an object (evaluating 'context.prototype.$promise')
这让我相信我的ngResourceMockFactory 有问题,但我不确定是什么问题。
【问题讨论】:
-
context 只是 NgResourceMock 的一个实例,所以
context.prototype是 undefined ,你应该使用NgResourceMock.prototype代替。它只是解决了这个错误。模拟你可以使用this tutorial
标签: javascript angularjs jasmine karma-jasmine