나는 현재의 소셜 미디어 사이트에있는 "링크 미리보기"기능을 모방 한 React 구성 요소를 가지고 있습니다. 당신은 링크에 입력이Capybara로 테스트하는 동안 의도적으로 AJAX 응답을 지연시키는 방법은 무엇입니까?
나는 반작용 성분을 갖는하여이 작업을 수행 ... 등, 이미지, 제목을 가져 오는 AJAX와는 URL 미리보기 데이터를 가져 오기 위해 내 서버에 다시 전화합니다.
그것이 내가 중간 "로드"상태를 보여 가져 오는 것 동안 (즉,로드 아이콘이나 물레 일부)
this.setState({ isLoadingAttachment: true })
return $.ajax({
type: "GET",
url: some_url,
dataType: "json",
contentType: "application/json",
}).success(function(response){
// Succesful! Do Success stuff
component.setState({ isLoadingAttachment: false })
}).error(function(response) {
// Uh oh! Handle failure stuff
component.setState({ isLoadingAttachment: false })
});
주처럼 isLoadingAttachment
상태 변수에만 유효
관련이 조각이 보이는 반작용 방법 잠시 동안 서버가 페칭을 수행하는 동안. 성공 및 오류 시나리오 모두 즉시이를 비활성화합니다.
내 Capybara 기능 사양으로 "로드 중"상태에서 일부 기능을 테스트하고 싶습니다. 모든 웹 호출과 서버에서 반환 할 데이터를 조롱했습니다. 그러나 모든 결과가 너무 빨리 발생하기 때문에 어떤 로딩을 수행하기도 전에 어떤 expect()..
문도 실행할 수 있습니다. 또한 의도적으로 wait_for_ajax
을 호출하지 않아 페이지가 아약스를 기다리지 않고 계속 진행될 수 있지만 너무 빠릅니다.
마지막으로 서버 호출을 의도적으로 1.0 초 지연했지만 그 중 하나가 작동하지 않았습니다. 나는 모든 것이 어떻게 든 하나의 스레드로되어 있기 때문에 추측합니까?
# `foo` is an arbitrary method called during the server-side execution
allow_any_instance_of(MyController).
to receive(:foo) { sleep(1.0) }.and_call_original
내가 어떻게 할 수 있습니까?
감사합니다!
감사 같은 것을 할 수 있도록 것이다 당신의 응용 프로그램 코드의 외부 모의 웹 응답에 - https://github.com/oesmith/puffing-billy - 더 나은 솔루션
puffing-billy
같은 것을 사용하는 것입니다! 다른 하나의 후속 조치 - '퓨마'가 여기 webrick보다 서버에 더 좋은 선택이되는 이유는 무엇입니까? 나는 그들이 같은 종류의 응답을 생성하기 때문에 서버가 무의미하다고 생각했을 것이다. – user2490003@ user2490003'puma'는 기본적으로 다중 스레드이며 여러 요청을 동시에 처리 할 것입니다 (동일한 요청을 다시 한 번 앱에 요청하는 것과 같습니다)) - 99 %는 프로덕션에서 webrick을 사용하지 않고 있는지도 모릅니다. 아마도 푸마를 사용하고 있습니까? 가능한 한 테스트 env를 제작물과 일치시키는 것이 가장 좋습니다. –
당신은 정확합니다, 나는 프로덕션에서 퓨마를 사용하고 있습니다. 설명 주셔서 감사합니다! – user2490003