我正在努力成为一名优秀的开发人员。写一些测试来涵盖我的指令。该指令注入了一个服务,该服务调用webApi端点。
当我运行测试时(在分钟时预计1等于2所以我可以证明测试实际上正在运行!!)我得到一个错误,即我认为我已经对我的真实端点发出意外请求GET模拟/删除服务,以便测试执行。我的测试看起来如下所示:
我认为通过使用我的服务名称调用$provide.service
然后模拟方法" getUserHoldings"那么这会在测试时自动注入,我在这里错过了一个技巧吗?意外请求的端点路径包含在具体服务的实际getUserHoldings方法中。
感谢您提供的任何帮助,因为我可以帮忙!
describe('directive: spPlanResults', function () {
var scope;
var directiveBeingTested = '<sp-plan-results></sp-plan-results>';
var element;
beforeEach (module('pages.plans'));
beforeEach (inject(function ($rootScope,
$compile,
currencyFormatService,
_,
moment,
plansModel,
appConfig,
$timeout,
$q,
$provide) {
scope = $rootScope.$new();
$provide.service('plansService', function () {
return {
getUserHoldings: function() {
var deferred = $q.defer();
return deferred.resolve([
{
class: 'Class1',
classId: 2,
award: 'Award1',
awardId : 2
}]);
}
};
});
element = $compile(directiveBeingTested)(scope);
scope.$digest();
});
it ('should be there', inject(function() {
expect(1).equals(2);
}));
});
答案 0 :(得分:1)
引用 - http://www.mikeobrien.net/blog/overriding-dependencies-in-angular-tests/ - 如果您提供了“提供”功能,它就可以正常运行。在&f;模块的上下文中进行配置,即执行类似 -
的操作describe('directive: spPlanResults', function () {
var scope;
var directiveBeingTested = '<sp-plan-results></sp-plan-results>';
var element;
beforeEach(module('pages.plans', function($provide) {
$provide.value('plansService', function() {
return {
getUserHoldings: function() {
var deferred = $q.defer();
return deferred.resolve([{
class: 'Class1',
classId: 2,
award: 'Award1',
awardId: 2
}]);
}
};
});
}));
beforeEach(inject(function($rootScope, $compile, currencyFormatService, _, moment, plansModel, appConfig, $timeout, $q) {
scope = $rootScope.$new();
element = $compile(directiveBeingTested)(scope);
scope.$digest();
});
it('should be there', inject(function() {
expect(1).equals(2);
})); });