Angular 在使用 karma 和 mocha 进行测试时未找到 $interval 服务
Angular's $interval service not found when testing using karma and mocha
我创建了一个将 $interval 作为依赖项的服务并使用它并且似乎可以正常工作。不幸的是,当我尝试对应用程序进行单元测试时,angular:
找不到应用程序 $interval 服务
Unknown provider: $$qProvider <- $$q <- $interval
我不是像往常一样在控制器内调用服务,而是在应用程序的 运行() 方法上调用:
app.service('myService', ['$rootScope', '$window', '$interval', myService]);
app.run(function (myService) {
...
});
它有效,但如果我尝试测试应用程序崩溃。 angular 服务的其余部分似乎没有这个问题($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,它会起作用。相反,其他 angular 服务,如 $timeout、$window 或 $location 似乎没有问题。
此外,我注意到 $resource 等其他服务也有此问题。
我认为其中一些服务在它们准备就绪之前需要其他东西,这就是为什么我不能在 app.run()?
调用它们
感谢您的帮助。
这一行肯定是错的。
app.controller('myController', [myService, function(myService){ ... }]);
数组注入语法应该包含字符串
app.controller('myController', ['myService', function(myService){ ... }]);
好的,
检查了很多东西后,我发现问题与 angular-mocks 过时有关。
我更新了 angular 和 angular-mocks 的版本,现在一切正常。
对不起!
我创建了一个将 $interval 作为依赖项的服务并使用它并且似乎可以正常工作。不幸的是,当我尝试对应用程序进行单元测试时,angular:
找不到应用程序 $interval 服务Unknown provider: $$qProvider <- $$q <- $interval
我不是像往常一样在控制器内调用服务,而是在应用程序的 运行() 方法上调用:
app.service('myService', ['$rootScope', '$window', '$interval', myService]);
app.run(function (myService) {
...
});
它有效,但如果我尝试测试应用程序崩溃。 angular 服务的其余部分似乎没有这个问题($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,它会起作用。相反,其他 angular 服务,如 $timeout、$window 或 $location 似乎没有问题。
此外,我注意到 $resource 等其他服务也有此问题。
我认为其中一些服务在它们准备就绪之前需要其他东西,这就是为什么我不能在 app.run()?
调用它们感谢您的帮助。
这一行肯定是错的。
app.controller('myController', [myService, function(myService){ ... }]);
数组注入语法应该包含字符串
app.controller('myController', ['myService', function(myService){ ... }]);
好的,
检查了很多东西后,我发现问题与 angular-mocks 过时有关。
我更新了 angular 和 angular-mocks 的版本,现在一切正常。
对不起!