jasmine.js는 ()가 비동기 콜백 내부에서 작동하지 않을 것으로 예상합니다.
저는 Jasmine(http://pivotal.github.com/jasmine/) 과 친해지고 있으며 다소 당황스러운 점을 발견했습니다.
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
});
expect(true).toEqual(false);
});
예상대로 실패합니다.
그러나 예상 통화를 콜백 내부로 이동합니다.
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
expect(true).toEqual(false);
});
});
어떻게든 통과합니다 :O
약간의 디버깅 후: api.sendGhostRequest()는 비동기 아약스 요청을 수행하고, 요청이 완료되기 전에 재스민이 러쉬합니다.
따라서 다음과 같은 질문이 있습니다.
재스민이 테스트 결과를 확인하기 전에 ajax 실행을 기다리도록 하려면 어떻게 해야 합니까?
Jasmine 2용 편집
재스민 2에서는 비동기 테스트가 훨씬 간단해졌습니다.비동기 코드를 처리해야 하는 모든 테스트는 테스트 완료를 나타내는 콜백과 함께 작성할 수 있습니다.Asynchronous Support(비동기 지원)라는 제목 아래 Jasmine 2 문서 참조
it('should be able to send a ghost request', (done) => {
api.sendGhostRequest((response) => {
console.log(`Server says ${response}`);
expect(true).toEqual(false);
done();
});
});
재스민 1
Asynchronous Support(비동기 지원) 헤더 아래 Jasmine 사이트에서 waitsFor() 및 runs()를 살펴봅니다.
실행 및 대기를 사용하면 Jasmine이 ajax 호출이 완료될 때까지 기다리거나 일부 시간 초과를 기다려야 합니다.
코드는 다음과 같습니다.
it("should be able to send a Ghost Request", function() {
runs(function() {
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
flag = true;
});
}, 500);
waitsFor(function() {
return flag;
}, "Flag should be set", 750);
runs(function() {
expect(true).toEqual(false);
});
}
이 경우 기대는 실패할 것입니다.
@pkopac 님께서 말씀하셨듯이.runs()
그리고.waitsFor()
a를 사용하는 것을 선호하여 v2에서 더 이상 사용되지 않습니다.done()
문서화된 대로 콜백: https://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support
it("should be able to send a Ghost Request", function(done) {
var api = fm.api_wrapper;
var success = function(response) {
console.dir('server says: ', response);
expect(response).toEqual('test response')
done();
};
api.sendGhostRequest(success);
});
런()을 살펴보고() 기다립니다.
특히 콜백이 어떤 방식으로 실행되었는지(부울을 체크로 사용할 수도 있음) 확인하기 위해 대기 중에 호출한 다음 예상을 실행할 수 있습니다.
runs를 사용하면 대기가 완료될 때까지 기다릴 수 있습니다.
언급URL : https://stackoverflow.com/questions/15141834/jasmine-js-expect-does-not-work-inside-an-asynchronous-callback
'programing' 카테고리의 다른 글
XML에서 스피너에 힌트를 추가하는 방법 (0) | 2023.10.09 |
---|---|
유튜브 임베디드 코드의 유튜브 썸네일을 워드프레스의 특징 이미지로 설정하는 방법은? (0) | 2023.10.09 |
IPv4 클라이언트/서버 앱에서 IPv6 지원 추가 - sin6_flowinfo 및 sin6_scope_id 필드? (0) | 2023.10.09 |
두 개의 개별 쿼리가 순간적으로 발생합니다.하위 쿼리로 쿼리가 매우 느립니다. 왜죠? mysql / mariadb (0) | 2023.10.09 |
MySQL 부울 "tinyint(1)"은 127까지 값을 유지합니다. (0) | 2023.10.09 |