用Jasmine和Angular设置测试的问题

时间:2013-03-16 16:20:49

标签: javascript unit-testing angularjs jasmine karma-runner

我正在尝试为我的项目设置一个单元测试环境,但是我遇到了一些问题。我正在尝试使用Testacular和Jasmine来测试我的AngularJS代码。

我有一个模块Services,它有一个名为KeepAlive的工厂方法。这是它的设置。

angular.module('services', []).factory('KeepAlive', ['$rootScope', function($rootScope){
    //My Code
}]);

此模块附加到名为MainModule的模块。这是它的代码。

angular.module('MainModule', ['filters', 'services', 'directives', 'ui'])
.config(['$httpProvider', function($httpProvider){
    //My Code
}]).run(['$rootScope', '$timeout', '$routeParams', 'KeepAlive', function($rootScope, $timeout, $routeParams, KeepAlive){
    //My Code
}]);

所以现在我想为我的测试添加此代码。所以这是我的testacular文件设置。

     JASMINE,
     JASMINE_ADAPTER,
     'assets/lib/jquery/jquery-1.7.1.js',
     'assets/lib/angular/angular.js',
     'assets/lib/angular/angular-ui.js',
     'jsTests/MockingLib/angular-mocks.js',
     'assets/scripts/modules/Admin.js',
     'assets/scripts/modules/MainModule.js',
     'assets/scripts/services/KeepAlive.js',
     'assets/scripts/services/Admin.js',
     'assets/scripts/filters.js',
     'assets/scripts/directives.js',
     'assets/scripts/controllers/admin/*.js',

现在这在我的testacular控制台中引发了一个错误。这是我得到的错误。

Error: Unknown provider: KeepAliveProvider <- KeepAlive
     at Error (<anonymous>)
     at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2627:8
     at Object.getService [as get] (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2755:32)
     at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2632:38
     at getService (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2755:32)
     at Object.invoke (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2773:6)
     at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2637:71
     at Array.forEach (native)
     at forEach (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:110:11)
     at Object.createInjector [as injector] (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2637:3)

这是我的Jasmine测试案例。

beforeEach(function () {
    admin = module("MainModule");
    module("services");
});

我错过了什么?我是新手。提前谢谢。

1 个答案:

答案 0 :(得分:4)

错误说有人要求提供名为“KeepAlive”的服务,但是注射器不知道如何创建它(没有提供者)。

这意味着,您可能没有加载模块。

当你在生产中引导你的应用程序时,你给它ng-app="something",它告诉Angular要加载哪个模块。同样,您需要指定在测试期间要加载哪些模块。

这可以解决您的问题:

beforeEach(module('services'));