각도와 재스민 조합을 사용하여 컨트롤러를 테스트하고 약속 된 약속 사용에 대해 확실하지 않습니다.약속 된 약속을 지닌 각도/재스민 테스트
이것은 제 사양 코드입니다.
describe('Controller Tests', function(){
var scope, searchAPI;
beforeEach(function(){
var mockSearchAPI = {};
module('myApp', function($provide){
$provide.value('searchAPI', mockSearchAPI);
});
});
inject(function($q){
var testData = {"message":"hi"};
mockSearchAPI.executeSearch = function(){
var defer = $q.defer();
defer.resolve(testData);
return defer.promise;
};
});
beforeEach('Main Search Controller Tests', function(){
function($controller, $rootScope, _searchAPI_){
scope = $rootScope.$new();
searchAPI = _searchAPI_;
$controller('MainSearchCtrl', function(){
$scope: scope,
searchAPI: searchAPI
});
scope.$digest();
}
});
it('should return a promise correctly', function(){
var field = "testfield";
var value = "testvalue";
var pageNumber = 1;
var promise = scope.processQueryByField(field, value, pageNumber);
//THIS LINE IS GIVING ME '{}'
alert(promise);
});
});
내가 "경고하는"줄에서 왜 '{}'의 출력을 얻는 지 확신 할 수 없습니다. inject 함수에서 "testData"로 정의한 데이터 구조체 여야하지 않습니까? 나는 여기서 무슨 일이 일어나고 있는지 확신하지 못한다. 나는 수많은 해결책을 시도했다.
내 컨트롤러 코드는 기본적으로 내가 인젝터 코드 내부에 정의 된 값을 수신
$scope.processQueryByField = function(field, value, pageNumber){
return searchAPI.executeSearch(field, value, pageNumber);
}
난 그냥 있어야하지 않나요 서비스에 대한 래퍼입니다?
'searchAPI.executeSearch'는 약속 권리를 반환? 그래서 궁극적으로'processQueryByField'는 데이터가 아닌 약속을 반환합니다. 그렇다면 설정하려는 기대치는 무엇입니까? 더 많은 것은'$ rootScope'를 잡아두고 expecation을 설정하기 전에 함수가 호출 된 후에 다이제스트를 적용해야합니다. – PSL
그냥 모의이 올바르게 설정되어 있는지 (즉, 약속을 되 돌리는 지) 확인하고 더 복잡한 테스트를 할 수 있는지 확인하고 싶습니다. 기대를 설정하기 전에 $ rootScope를 얻고 다이제스트를 적용하면 무엇을 의미합니까? – Zack
'은 (함수 "검색을 호출해야'() { spyOn (mockSearchAPI 'executeSearch'); VAR 필드 ="testfield "; VAR 값 ="testvalue "; VAR의 PAGENUMBER = 1; 범위. processQueryByField (필드, 값, PAGENUMBER) 은 (mockSearchAPI.executeSearch) .toHaveBeenCalled()을 예상, 예상 (mockSearchAPI.executeSearch) .toHaveBeenCalledWith (필드, 값, PAGENUMBER) });' – PSL