我有一项正在测试的服务:
angular.module('services', []).
service('myService', function(topService) {});
topService
是另一个angularjs服务。
现在我想为myService
编写单元测试,但我需要模拟topService
并将其传递给myService。
我试过但不确定如何让它发挥作用:
define(['angular', 'angularMocks', 'services/my'], function(_, mocks, _) {
beforeEach(mocks.module('services'));
describe("my service", function() {
it("should do something", mocks.inject(function(myService) {
// how to mock and inject a `topService` to `myService` ????
expect(myService).doSomething().toEqual("???");
}));
});
});
怎么做?
答案 0 :(得分:1)
首先创建mockedTopService,提供运行测试所需的任何函数:
var mockedtopService = {
doSomething: function() {
return "test";
}
};
然后使用$ provide:
将其提供给角度beforeEach(function () {
module(function ($provide) {
$provide.value('topService', mockedtopService );
});
}
如果您需要通过角度获取服务实例,可以这样做:
inject(function (topService) {
var topServiceInstance = topService;
});