AngularJS 리소스를 서비스로 노출했습니다.
myServices.factory('Service1', ['$resource',
function ($resource) {
var Registrations = $resource('/api/v1/registration/:id');
return {
getForTcn: function(tcn) {
return Registrations.query({ tcn: tcn, state: 'Active' }).$promise;
}
};
} ]);
그리고 아래에 실패한 Jasmine 테스트가 있습니다.
beforeEach(inject(function (_$httpBackend_, Service1) {
$httpBackend = _$httpBackend_;
service = Service1;
$httpBackend.when('GET', /^\/api\/v1\/registration\?.*/).respond([]);
}));afterEach(function () {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
위의 설정을 사용하면 어설 션이 실패합니다.
it('should have correct http GET request', function () {
Service.getForTcn('1234');
$httpBackend.expectGET('/api/v1/registration?tcn=1234&State=Active');
$httpBackend.flush();
});
서비스 함수와 어설 션에서 매개 변수의 위치를 바꾸면 테스트가 통과됩니다.
getForTcn: function(tcn) {
return Registrations.query({ state: 'Active', tcn: tcn }).$promise;
}
$httpBackend.expectGET('/api/v1/registration?state=Active&tcn=1234');
여기서 무슨 일이 일어나는지 아십니까? 실패한 버전이 테스트 외부에서 실행될 때 실제로 작동하는지 시도하지 않았지만 비슷한 동작을 본 사람이 있습니까?
감사
문제는 쿼리 인수가 알파벳순으로 배열되어 있으므로 foo
인수로 가졌 으면 주장은 다음과 같습니다.
$httpBackend.expectGET('/api/v1/registration?foo=1234&state=Active');
그리고 이것은 통과 할 것입니다. 반대로 인수가 zoo
다음과 같으면 주장은 다음과 같습니다.
$httpBackend.expectGET('/api/v1/registration?state=Active&zoo=1234');
그렇기 때문에 질문에 표시 한대로 인수 tcn
뒤에 넣어야 state
합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다