2013-04-11 35 views
13

我茉莉花/ AngularJS單元測試的新手。我創建了一個簡單的角度應用程序來添加兩個數字,以便我可以學習如何爲Angular App編寫單元測試。 。基於博客和堆棧溢出答案Angular Doc on unit test is incomplete,我建我的第一次測試,我遇到了「注射器」未定義的錯誤。我正在使用Jasmine框架進行單元測試。
HTML爲什麼我得到「注入」未定義的錯誤使用茉莉花與角時?

<body> 
<div ng-controller="additionCtrl"> 
    First Number: <input ng-model="NumberOne"/><br/> 
    Second Number: <input ng-model="NumberTwo"/> 
    <button ng-click="add(NumberOne, NumberTwo)">Add</button><br/> 
    Result: {{Result}} 
</div> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script> 
<script src="Scripts/additionCtrl.js"></script> 
</body> 

控制器:

function additionCtrl($scope) { 
$scope.NumberOne = 0; 
$scope.NumberTwo = 0; 
$scope.Result = 0; 
$scope.add = function (a, b) { 
}; 
} 

茉莉花規範文件。

describe("Addition", function() { 
var $scope, ctrl; 

beforeEach(inject(function ($rootScope, $controller) { 
    this.scope = $rootScope.$new(); 
    ctrl = $controller('additionCtrl', { 
     $scope: this.scope 
    }); 
})); 

it("should add two integer numbers.", inject(function ($controller) {   
    expect(ctrl.add(2, 3)).toEqual(5); 
})); 
}); 

Specrunner.html

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script> 
    <script type="text/javascript" src="lib/angular-mocks.js"></script> 
    <script type="text/javascript" src="lib/jasmine-1.3.1/jasmine.js"></script> 
    <script type="text/javascript" src="lib/jasmine-1.3.1/jasmine-html.js"></script> 

    <!-- include source files here... --> 
    <script type="text/javascript" src="../App/Scripts/additionCtrl.js"></script> 

    <!-- include spec files here... --> 
    <script type="text/javascript" src="spec/addition.spec.js"></script> 

這是一個失敗的測試,一旦測試失敗與預期的結果,那麼我可以修改代碼,使其通過,但我不知何故與面臨的問題角模擬沒有得到注射器。
我看到一個例子,我可以newup控制器,而不是使用注射器,但我想嘗試學習使用注射器,使我建立了更復雜的測試。
我可能會在這裏錯過簡單的東西。請指導我寫任何我可能錯過的文章。
謝謝

回答

11

以供將來參考這裏是一個完整的單元測試設置一個Plunker(用於回答你的問題我要發佈)

http://plnkr.co/edit/KZGKM6

有用的這種設置可以共享的測試場景。

+0

這就是我一直在尋找了一段時間:) – Nair 2013-04-11 22:28:18

11

發現問題,我用來訪問angular-mock的網址是錯誤的。我把它改成「http://code.angularjs.org/1.0.6/angular-mocks.js」,也改變了腳本標記的順序

<script type="text/javascript" src="lib/jasmine-1.3.1/jasmine.js"></script> 
<script type="text/javascript" src="lib/jasmine-1.3.1/jasmine-html.js"></script> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script> 
<script type="text/javascript" src="http://code.angularjs.org/1.0.6/angular-mocks.js"></script> 

現在它的方法失敗,因爲它應該是。

+0

對於AngularJS 1.2.5,角mocks.js可作爲這裏https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular-mocks.js託管庫,因此,沒有必要使用code.angularjs.org網站。 – danidemi 2014-11-19 08:08:12