jasmine 및 angularJS로 코드를 테스트하는 방법을 이해하려고합니다. 필자는 컨트롤러와 주입 된 서비스로 테스트 프로젝트를 작성했습니다. 이제 컨트롤러를 테스트하고 주입 된 서비스를 모의하려고했습니다. 그러나 나는 컨트롤러에서 "Arrived"기능을 테스트하는 방법을 찾지 못했습니다. http://jsfiddle.net/2fwxS/jasmine을 사용하여 angularJS 안에 주입 된 서비스가있는 컨트롤러 테스트
controller.js :
angular.module('myApp.controllers', [])
.controller('MyCtrl', ['$scope', 'MyService', function ($scope, MyService) {
$scope.User = {};
$scope.HasUserArrived = false;
$scope.Arrived = function(firstname, lastname) {
$scope.HasUserArrived = MyService.Arrive(firstname, lastname);
return $scope.HasUserArrived;
}
}]);
services.js : 여기 내 jsfiddle의
var myApp = angular.module('myApp.services', []).
value('version', '0.1');
myApp.factory('MyService', [function() {
return {
HasArrived: false,
Arrive: function (firstname, lastname) {
this.HasArrived = false;
if (firstname && lastname) {
this.HasArrived = true;
}
console.log("User has arrived: " + this.HasArrived);
return this.HasArrived;
}
}
}]);
나는 $이 될 수 제공하는 몇 가지 유사한 설명을 발견 올바른 해결책 (How can I write jasmine test for angular controller and service like this?) 또는 createSpy (How do you mock Angular service that is a function?)하지만 $ provider.factory 또는 $ provider.value가 필요한 시점을 이해할 수 없거나 언제 createSpy를 사용해야합니까?
누군가가 나에게 차이를 이해하는 데 도움이하고 실행 내 jsFiddle ( http://jsfiddle.net/2fwxS/) 예를 비활성화 코드를 얻을 수 있다면 감사하겠습니다...
죄송합니다. @Michael 답변과 수정 된 jsFiddle을 보내 주셔서 감사합니다. 그 작은 변화로 나는 성공적으로 테스트를 실행할 수있었습니다! 실제로 공장이 작동하지 않는 이유를 알고있는 것이 좋을 것입니다. – burgerS
그리고 내 동료와 나는이 예에서 서비스를 조롱하는 대신 서비스를 테스트 할 수있는 방법이 있다면 관심이 있습니다. 우리는 서비스를 개별적으로 테스트해야한다는 것을 알고 있지만이 예제에서 서비스를 테스트 할 수 있는지 궁금해하고 있습니다 ... – burgerS
서비스가 매우 간단하고 컨트롤러를 테스트 할 수 있도록 서비스를 조롱 할 수 있습니다. 그 행동을 안전하게 예측하여 서비스 구현의 오류로 인해 컨트롤러 테스트를 위반할 확률을 최소화합니다. 하지만 그렇게한다면 서비스가 아닌 컨트롤러를 테스트하게 될 것입니다. 서비스를 별도로 테스트하여 정상적으로 작동하는지 확인할 수 있습니다. –