注入用于运行结束测试的AngularJs服务
我正在尝试测试一个名为MyService的angularjs服务。如果我尝试注入它,似乎angular在加载之前尝试使用它。另一方面,如果我通过注入用于运行结束测试的AngularJs服务,angularjs,unit-testing,karma-runner,Angularjs,Unit Testing,Karma Runner,我正在尝试测试一个名为MyService的angularjs服务。如果我尝试注入它,似乎angular在加载之前尝试使用它。另一方面,如果我通过$provide等方式模拟MyService,它会工作,但我不会有实际的对象进行测试 (function (angular) { 'use strict'; angular.module('app', []).run(["MyService", function (MyService) {
$provide
等方式模拟MyService,它会工作,但我不会有实际的对象进行测试
(function (angular) {
'use strict';
angular.module('app', []).run(["MyService",
function (MyService) {
MyService.initListeners();
}
]);
// this is supposed to be in another file
angular.module('app')
.service("MyService", function() {
return {
initListeners: function() {
console.log("working")
}
}
})
}(angular));
测试是这样的:
(function () {
'use strict';
describe("MyService", function () {
var MyService = null;
beforeEach(module("app"));
beforeEach(inject(function ($injector) {
MyService = $injector.get('MyService');
}));
afterEach(function () {
MyService = null;
});
it("injection works", function () {
expect(true).toBeTruthy(); // throws exception
});
});
}());
我在JSFIDLE上做了测试 我看到了一些控制台消息的执行顺序。正如预期的那样,执行顺序是正确的
My service constructor
before init
MyService.initListeners()
after init
这两个测试工作正常:
it("injection works", function () {
expect(true).toBeTruthy(); // throws exception
expect(MyService).toBeDefined();
});
代码如下:
它可能是您的AngularJS版本、Jasmine等。您的问题是如何获得真正的MyService对象?是的,我想测试MyService,但我无法测试,因为它是在运行时注入的,所以angular会在加载之前查找它。您应该在每个(模块('app',函数($provide){$provide.factory)之前这样做('MyService','LINK TO CONSTRUCTOR IF it IN CONSTRUCTOR');};@NarekMamikonyan你到底是什么意思?你能把它作为响应发布吗?你能显示你的服务代码吗?