angularjs – 如何使用karma / jasmine模拟angularAMD中的服务?
发布时间:2020-12-17 07:24:31 所属栏目:安全 来源:网络整理
导读:我有一个使用AngularAMD / RequireJS / Karma / Jasmine的项目,我的基本配置全部工作,大多数单元测试运行并成功通过. 我无法使用angular.mock.module或angularAMD.value()正确注入模拟服务. 我有: // service definition in services/MyService.jsdefine(['
我有一个使用AngularAMD / RequireJS / Karma / Jasmine的项目,我的基本配置全部工作,大多数单元测试运行并成功通过.
我无法使用angular.mock.module或angularAMD.value()正确注入模拟服务. 我有: // service definition in services/MyService.js define(['app'],function(app) { app.factory('myService',[ '$document',function($document) { function add(html) { $document.find('body').append(html); } return { add: add }; }]); } ); // test define(['angularAMD','angular-mocks','app','services/MyService'],function(aamd,mocks,app) { describe('MyService',function() { var myBodyMock = { append: function() {} }; var myDocumentMock = { find: function(sel) { // this never gets called console.log('selector: ' + sel); return myBodyMock; } }; var svc; beforeEach(function() { // try standard way to mock a service through ng-mock mocks.module(function($provide) { $provide.value('$document',myDocumentMock); }); // hedge my bets - try overriding in aamd as well as ng-mock aamd.value('$document',myDocumentMock); }); beforeEach(function() { aamd.inject(['myService',function(myService) { svc = myService; }]); }); it('should work',function() { // use svc expecting it to have injected mock of $document. spyOn(myDocumentMock,'find').andCallThrough(); spyOn(myBodyMock,'append'); svc.add('<p></p>'); expect(myDocumentMock.find).toHaveBeenCalledWith('body'); expect(myBockMock.append).toHaveBeenCalledWith('<p></p>'); }); }); } ); 有谁知道我哪里出错了?任何帮助将非常感激.
Angular不是异步的,我认为不是一个好的意识形态同时使用.如果你正试图达到一个好的模块化方法,好吧,但是在你把它放到浏览器之前使用RequireJS优化器构建所有内容,关于测试,我认为你可以使用RequireJS优化器来构建你的模块,即使在测试中,它也可以让你摆脱“CommonJS环境”.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |