我创建了一个服务,它将$ interval作为依赖项并使用它并且似乎有效。不幸的是,当我尝试单元测试时,应用$ interval服务找不到angular:
Unknown provider: $$qProvider <- $$q <- $interval
我没有像往常一样在控制器内调用服务,而是在应用程序的run()方法中调用:
app.service('myService', ['$rootScope', '$window', '$interval', myService]);
app.run(function (myService) {
...
});
它有效,但如果我尝试测试应用程序崩溃。其余的角度服务似乎没有这个问题($ window,$ location,$ rootScope,...),如果我将我的服务附加到控制器而不是在app.run()上调用它,即使是同样的服务也可以工作:
app.controller('myController', ['myService', function(myService){ ... }]);
我使用Karma + Mocha + Sinon + Chai来测试。
更新 迷你应用尝试在app.run()使用$ interval的示例:
var anApp = angular.module('myTestApp', ['ngRoute']);
anApp.run(function($rootScope, $timeout, $window, $location, $interval) {
// blah
});
测试:
describe("Lalarala", function() {
var scope = null;
beforeEach(function() {
module("myTestApp");
inject(function ($rootScope) {
scope = $rootScope.$new();
});
});
it("doesnt crash", function () {
//blah
});
});
注意:如果从app.run()中移除$ interval,则可以正常工作。相反,其他角度服务,如$ timeout,$ window或$ location似乎并没有打扰。
另外,我注意到像$ resource这样的其他服务也存在这个问题。
我认为其中一些服务在准备好之前还需要其他服务,这就是为什么我不能在app.run()上调用它们?
感谢您的帮助。
答案 0 :(得分:1)
这一行肯定是错的。
app.controller(&#39; myController&#39;,[myService,function(myService){...}]);
数组注入语法应包含字符串
app.controller('myController', ['myService', function(myService){ ... }]);
答案 1 :(得分:0)
确定,
在检查了很多东西后,我发现问题与角度模拟过时有关。
我更新了角度和角度模拟的版本,现在一切正常。
抱歉!