2013-04-11 15 views
13

私はJasmine/AngularJSユニット初心者テストです。 2つの数字を追加するための簡単な角型アプリを作成し、角型アプリケーションの単体テストの作成方法を学ぶことができます。 Angular Doc on unit test is incomplete。ブログとスタックオーバーフローの回答に基づいて、私は最初のテストを構築し、私は 'injector'の未定義エラーに遭遇しています。私はユニットテストのために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) { 
}; 
} 

ジャスミンspecファイル。

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> 

これが失敗するテストで、テストが期待された結果で失敗したら、私はそれが通過するためにコードを変更することができますが、私は何とかして問題に直面しています角のモックがインジェクタを得ていない。
私は、インジェクタを使用する代わりにコントローラを新しくすることができる例を見ましたが、私はより複雑なテストをセットアップするためにインジェクタを使用することを学びたいと思います。
私はここで簡単な何かが欠けているかもしれません。私が逃した可能性のある書面に私を導いてください。
ありがとう

答えて

11

は、ここではテストシナリオを共有するために利用可能なこの設定を持つように完全なユニットテストのセットアップとPlunker(あなたの質問への答えのために私が投稿しようとしていた)

http://plnkr.co/edit/KZGKM6

便利です。

+0

これは私がいくつかの時間を探していたものです:) – Nair

11

問題が見つかりました。私が角モックにアクセスするために使用していたURLが間違っていました。私は「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の場合、angular-mocks.jsはhttps://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular-mocks.jsのホストライブラリとして入手できますので、必要ありませんcode.angularjs.orgのウェブサイトを使用してください。 – danidemi

関連する問題