嘲笑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/