2014-04-18 2 views
1

나는 범위 내에서 메서드가 호출 된 경우 테스트의 (아래 참조) 사양재스민 테스트가 실패

describe("Event Module tests", function() { 

    var scope, simpleController; 

    beforeEach(module('SimpleApplication')); 
    beforeEach(inject(function ($rootScope, $controller) { 
     scope = $rootScope.$new(); 
     simpleController = $controller("SimpleController", { 
      $scope: scope 
     }); 
    })); 


    it("Scope function should be triggered", function() { 

     spyOn(scope, "trigger"); 

     scope.trigger();//invoke the function on controller 

     expect(scope.trigger).toHaveBeenCalled();//Passes 
     expect(scope.isTriggered).toBeTruthy();//Fails 

    }); 

}); 

응용 프로그램 코드 (코드 테스트 할)이 있습니다

angular 
    .module("SimpleApplication", []) 
    .controller("SimpleController", function ($scope) { 

     $scope.message = "Hello World"; 

     $scope.isTriggered = false; 

     $scope.trigger = function() { 
      $scope.isTriggered = true; 
     }; 
    }); 

재스민 "진실이라고 거짓 될 것으로 예상했다." 어째서? 그 방법은 그것을 사실로 설정했기 때문에 !!

업데이트 : 어떤 이유

이 SpyOn 그것이 의도 된 것이 내 목적을 돌연변이했다. 따라서 코드 조각 아래에서 좋은 결과를 얻을 수 있습니다.

it("Scope function should be triggered", function() { 

      scope.trigger();//invoke the function on controller 

      expect(scope.isTriggered).toBeTruthy();//Now Passes 

     }); 
+1

여기에 잘못된 사람이 있을지는 모르겠지만 Chrome이나 Firefox와 같은 브라우저에서 단위 테스트를 실행할 수 있다는 것을 알고 계셨습니까? 코드를 단계별로 실행하여 수행중인 작업을 확인하십시오. 명령 줄에서 Karma를 실행하고 브라우저에서 디버거를 사용하여이 작업을 수행 할 수 있습니다. –

+0

@ DavidM.Karr 어떤 식 으로든 다른 제안에 의해 저에게 답을 얻을 수 있습니다. 'Spyon'이 내 '방아쇠'기능에 돌연변이를 일으키고 있었으므로 실제로 원하는대로하지 못했습니다. 그래서 그 코드 조각이 제거되었습니다. – Deeptechtons

답변

2

spyOn이 메서드를 호출하지 않습니다. 그냥 스파이입니다. 전화를 걸려면 다음을 추가해야합니다.

spyOn(scope, "trigger").andCallThrough()