嘲笑Jasmineunit testing中的Angular模块依赖关系
我试图unit testing控制器代码在一个模块,其他模块作为依赖,但一直没能弄清楚如何正确地嘲笑他们。
我正在使用茉莉花框架,并运行与噶(测量)的testing。
模块代码
var app = angular.module('events', ['af.widgets', 'angular-table']); app.controller('eventsCtrl', function([dependencies]){ $scope.events = []; ... });
规范代码
describe('events module', function(){ var $scope, ctrl; beforeEach(function(){ angular.mock.module('af.widgets', []); angular.mock.module('angular-table', []); module('events', ['af.widgets', 'angular-table']); }); beforeEach(inject(function($rootScope, $controller){ $scope = $rootScope.new(); ctrl = $controller('NameCtrl', { $scope: $scope, }); })); it('should have an empty events array', function(){ expect($scope.events).toBe([]); }) });
我得到的错误是噶是“没有模块af.widgets”,所以显然我不嘲笑模块依赖正确的。 任何提示?
如果你想模拟一个声明一个或多个服务的模块,我已经使用了这个代码:
beforeEach(function(){ module('moduleToMock'); module(function ($provide) { $provide.value('yourService', serviceMock); }); });
如果你想要模拟的服务也是你想unit testing的服务(在另一个茉莉花描述中),这是非常有用的。 由fscof提出的解决scheme很好,但不能为angular-table
模块创buildunit testing。
以下是我想到的:
我没有加载任何'angular-table'模块在我的karma.conf.js文件,因此错误。 这是有意的,因为我想testing没有实际的表模块的“事件”模块。
我能够通过在我的testing文件夹中创build一个名为“mocks / angular-table.js”的新文件来轻松地模拟'angular-table'模块,并添加了以下代码:
/mocks/angular-table.js
'use-strict'; angular.module('angular-table', []);
我把这个文件和我想testing的真实'events'模块一起添加到我的karma.conf.js文件中:
karma.conf.js
... files = [ JASMINE, JASMINE_ADAPTER, 'scripts/libs/angular.js', 'scripts/libs/angular-mocks.js', 'scripts/events.js', // this is the real module. 'scripts/mocks/*.js', //loads all custom mocks. 'scripts/specs/*.spec.js' // loads my spec file. ] ...
最后在我的spec文件中,我可以通过在beforeEach块中单独调用它们来添加这两个模块:
规格/ events.spec.js
beforeEach(function(){ module('angular-table'); module('events'); });
我有这个想法来构build我的文件从这个post这种方式
我最近发布ngImprovedTesting,应该使在AngularJS方式的模拟testing更容易。
在你的情况只是在你的Jasminetesting中使用以下:beforeEach(ModuleBuilder.forModule('events')。serviceWithMocks('eventsCtrl')。build());
有关ngImprovedTesting的更多信息,请查看其介绍性博客文章: http ://blog.jdriven.com/2014/07/ng-improved-testing-mock-testing-for-angularjs-made-easy/