2013-03-16 51 views
0

我正在嘗試爲我的項目設置單元測試環境,並遇到一些問題。我試圖用Jasmine的Testacular來測試我的AngularJS代碼。用Jasmine和Angular設置Testacular的問題

我有一個模塊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 
}]); 

所以現在我想添加此代碼爲我的測試。所以這裏是我的渺小文件設置。

 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) 

這是我的茉莉花測試案例。

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

我錯過了什麼?我是新來的單身漢。提前致謝。

+2

確保您調用'模塊( '服務')'在您的測試中'beforeEach'塊。 – 2013-03-16 18:54:28

+0

順便說一句,如果我從我的run方法和我的文件列表中刪除了KeepAlive,它會執行我所有的測試用例 – Abilash 2013-03-17 04:17:24

+1

我很確定@Vojta和我是對的 - 模塊沒有被加載。你的代碼在Github上? – 2013-03-17 04:20:54

回答

4

錯誤說有人要求一個名爲「KeepAlive」的服務,但注入器不知道如何創建它(沒有提供者)。

這意味着,您可能沒有加載模塊。

當您在生產環境中引導您的應用程序時,您會給它ng-app="something",它告訴Angular要加載哪個模塊。以同樣的方式,你需要指定你想在測試期間加載哪些模塊。

這應該解決您的問題:

beforeEach(module('services')); 
+0

Hi @Vojta。謝謝回覆。我已經加載了我的模塊。我在beforeEach中包含了'module(「MainModule」);''。我也嘗試添加你告訴我的內容。它沒有工作。我錯過了什麼? – Abilash 2013-03-17 02:49:21

+0

轉到http:// localhost:9876/debug.html並檢查控制檯是否有其他錯誤。這與Testacular無關。 – Vojta 2013-03-18 01:27:31

+0

對不起@Vojta的麻煩。我沒有正確地訂購我的文件。非常感謝您的幫助 – Abilash 2013-03-18 03:41:56