2013-04-11 10 views
13

Sono un principiante di test dell'unità Jasmine/AngularJS. Ho creato una semplice app angolare per aggiungere due numeri in modo da poter imparare come scrivere test unitari per l'Angular App. Il Angular Doc on unit test is incomplete. Basati sui blog e le risposte di overflow dello stack, costruisco il mio primo test e sto correndo in errore non definito 'injector'. Sto usando il framework Jasmine per il test delle unità.
HTMLperché ottengo l'errore "iniettato" non definito quando si utilizza Jasmine con Angular?

<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> 

Controller:

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

file spec Jasmine.

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> 

Questo è un test in mancanza e una volta che il test non riesce con il risultato atteso allora posso modificare il codice per farlo passare, ma sto affrontando il problema con qualche modo il mock angolare non ottiene l'iniettore.
Ho visto un esempio in cui posso aggiornare un controller invece di utilizzare l'iniettore, ma mi piacerebbe provare a imparare sull'uso dell'iniettore in modo da impostare test più complessi.
Potrei mancare qualcosa di semplice qui. Per favore, indirizzami a qualsiasi articolo che potrei aver perso.
Grazie

risposta

11

Per riferimento futuro qui un Plunker con una configurazione unit test completo (per la risposta alla tua domanda che stavo per inviare)

http://plnkr.co/edit/KZGKM6

utile avere questa configurazione disponibili per la condivisione di scenari di test.

+0

Questo è quello che cercavo da tempo :) – Nair

11

Trovato il problema, l'URL che stavo usando per accedere a angular-mock era sbagliato. Ho cambiato in "http://code.angularjs.org/1.0.6/angular-mocks.js" e anche cambiato l'ordine dei tag di script per

<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> 

ora sta venendo a mancare il metodo in quanto si suppone che sia.

+0

Per AngularJS 1.2.5, angular-mocks.js è disponibile come libreria ospitata qui https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular-mocks.js, quindi, non è necessario utilizzare il sito Web code.angularjs.org. – danidemi

Problemi correlati