我正努力成为一名优秀的开发人员& &;写一些测试来覆盖我的指令。指令中注入了一个服务,用来调用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);
}));
});
参考- http://www.mikeobrien.net/blog/overriding-dependencies-in-angular-tests/-它会工作,如果你做你的'$提供'配置在'模块的上下文中,即做一些像-
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);
})); });