2013-04-11 1 views
13

나는 Jasmine/AngularJS 단위 테스트 초보자입니다. 두 개의 숫자를 더하기 위해 간단한 앵글 앱을 만들었습니다. 앵글 러 앱의 단위 테스트를 작성하는 법을 배울 수 있습니다. 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) { 
}; 
} 

재스민 사양 파일.

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

여기 (I 게시하고 있었다 질문에 대한 답변) 전체 단위 테스트 설정과 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

관련 문제