如何在AngularJS中测试.run?
myApp.run([ '$rootScope','userService',function($rootScope,userService) { return userService.isAuthenticated().then(function(response) { if (response.data.authenticated) { return $rootScope.$broadcast('login',response.data); } else { return userService.logout(); } }); } ]); 这是我在init.js文件中的代码.我怎样才能对此进行单元测试?
单元测试run(..)块就像在jasmine中加载模块(..)一样简单.
以下所有代码均可在this plunker中获得. 考虑以下非常简单的app.js: var _idx = 1; window.log = function(s) { console.log('(' + _idx++ + ') ' + s); }; var app = angular.module('myapp',[]); app.run(function($rootScope) { log('run block'); $rootScope.valueSetInRun = 666; }); app.controller('MainCtrl',function($scope) { log('MainCtrl block'); }); 请注意,此应用程序中的标记无关紧要. 现在考虑以下测试: describe('myapp',function() { beforeEach(module('myapp')); beforeEach(inject(function($rootScope) { log('beforeEach'); })); it('should allow me to test the run() block',inject(function ($rootScope) { log('it block'); expect( $rootScope.valueSetInRun ).toBe(666); })); }); 这是控制台输出: (1) run block (2) MainCtrl block (3) run block (4) beforeEach (5) it block 请注意,测试通过 一些重要的观察 >在正常的应用程序执行期间记录前两个控制台输出,(1)和(2) 鉴于上述情况,我们可以得出如下结论: >在单元测试中,模块’myapp’被实例化 最后,我们可以得出结论,上面的代码是如何测试运行块的.至于您的特定测试,凭借这些知识,可以使用dependency injection mocking和Jasmine’s (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |