angularjs – 如何在另一个服务中从外部文件注入服务的模拟
我正在测试服务1取决于另一个服务B.通常这样做的正确方法是在注入A之前使用$provide对象.但是,我有两个约束:
>服务B的模拟存储在另一个文件中,因为我在多个测试中重用它(如后面所示,我只是注册一个新的Angular服务) 问题是,到目前为止(我正在测试控制器),我能够从我的测试中访问服务B,我需要注入它.但是要在$provide中模拟它,我需要在我的测试中访问它,这会产生问题,因为$provide需要在任何inject()之前使用.这是我的测试: describe('viewsListService',function() { var viewList,queryDeferred,mockViews,$scope; beforeEach(module('BoardMocks')); beforeEach(module('Board')); beforeEach(inject(function(mockViewsService) { var query = {}; mockViewsService.init({},query); queryDeferred = query.deferred; mockViews = mockViewsService.mock; })); beforeEach(function() { angular.mock.module('Board',function ($provide) { $provide.value('Views',mockViews); }); }); beforeEach(inject(function(viewsListService,$rootScope) { $scope = $rootScope.$new(); viewList = viewsListService; // Initialisation of the viewsListService viewList.init(); queryDeferred.resolve([1]); $scope.$digest(); })); describe('getAllViews',function() { var allViews; beforeEach(function() { allViews = viewList.getAllViews(); }); it('should return all the views',function() { expect(allViews.length).toBe(1); }); }); }); 这给了我一个错误:Injector已经创建,无法注册模块!,指向angular.mock.module调用. 我将我的模拟服务移动到另一个模块,认为它可能会解决问题,想知道注入器是否特定于模块,但它似乎不是(移动beforeEach(模块(‘Board’));之后第一个inject()不能解决问题. 你有任何想法让它工作,同时将模拟保存在外部文件中(我很好,没有将它注册为Angular服务,但只是对于普通对象,如果它可以解决这个问题).
经过大量的回顾,我找到了Valentyn Shybanov的答案,解释了如何做到这一点.事实上这很简单.我会留在这里为其他失去灵魂的人.
所以,如果你想嘲笑“观点”服务.您创建一个包含“视图”服务的“BoardMocks”模块.如果在“Board”之后包含“BoardMocks”,则在测试期间将使用模拟的“Views”服务. 请在此处查看原始答案: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |