我创建了一个服务,它具有 $interval 作为依赖项并使用它并且似乎可以工作。不幸的是,当我尝试对应用程序进行单元测试时,角度找不到 $interval 服务:
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() 调用它们的原因?
谢谢你的帮助。