[RUBY-ON-RAILS] 이 RSpec에 / 카피 바라 테스트를 통과하는 원인 왜 후크 후에 "잠 1"을 추가합니까?
RUBY-ON-RAILS이 RSpec에 / 카피 바라 테스트를 통과하는 원인 왜 후크 후에 "잠 1"을 추가합니까?
나는 레일 4.0.5, RSpec에 2.14.1, 카피 바라 2.2.1, 카피 바라 - 웹킷 1.1.0 및 database_cleaner 1.2.0을 사용하고 있습니다. 나는 다음과 같은 기능 테스트와 몇 가지 이상한 행동을보고 (메뉴가 나타나도록 아이콘을 가리키면, 게시물에 댓글을 보는 사용자를 시뮬레이션하고 댓글을 삭제 메뉴 항목을 클릭)하고 있습니다 :
let(:user){create(:user)}
let(:post){create(:post, author: user)}
let!(:comment){create(:comment, post: post, author: user)}
...
it "can delete a comment" do
assert(page.has_css? "#comment-#{comment.id}")
find("#comment-#{comment.id}-controls").trigger(:mouseover)
find("#comment-#{comment.id} .comment-delete a").click
assert(page.has_no_css? "#comment-#{comment.id}")
end
이 시험으로 인해 일부 레코드가 같은 데이터베이스에서 검색되는 항상 시간의 80 %에 대해 실패 nil-- I GET NoMethodError : 무기 호에 대한 정의되지 않은 방법 X는 : NilClass는 X의 다양한 값에 대해 때때로 전무는 존재가의 코멘트입니다 삭제는, 때로는 때로는 주석 / 게시물의 작성자, 댓글이에 붙어있는 게시물입니다.
나는 시험의 끝에 잠 1을 추가하면 전달합니다
it "can delete its own comment" do
assert(page.has_css? "#comment-#{comment.id}")
find("#comment-#{comment.id}-controls").trigger(:mouseover)
find("#comment-#{comment.id} .comment-delete a").click
assert(page.has_no_css? "#comment-#{comment.id}")
sleep 1
end
나는 블록 후 수면 1을 넣어 경우에도 전달합니다.
어떤 생각이 왜 이런 NoMethodErrors를 얻을 수 및 / 또는 내가 작업이 완료가 결국 두 번째 잠을 만들면 왜 테스트에 통과?
해결법
-
==============================
1.나는 그것이 데이터베이스에서 삭제되기 전에이 댓글이 (당신이 주장하고있는 마지막 인) 페이지에서 사라질 때까지 응용 프로그램에서 가능하다고 생각한다. 삭제가 발생하기 전에 테스트를 정리할 수있는 것을 의미한다. 이 경우 당신은 실제 삭제가 시험의 끝에서 발생하는 대기하여 문제를 해결할 수 있습니다. 나는이 방법은 약 (카피 바라 2에서 제거하지만 때로는 여전히 필요 된 방법의 재 구현)가
나는 그것이 데이터베이스에서 삭제되기 전에이 댓글이 (당신이 주장하고있는 마지막 인) 페이지에서 사라질 때까지 응용 프로그램에서 가능하다고 생각한다. 삭제가 발생하기 전에 테스트를 정리할 수있는 것을 의미한다. 이 경우 당신은 실제 삭제가 시험의 끝에서 발생하는 대기하여 문제를 해결할 수 있습니다. 나는이 방법은 약 (카피 바라 2에서 제거하지만 때로는 여전히 필요 된 방법의 재 구현)가
def wait_until(delay = 1) seconds_waited = 0 while ! yield && seconds_waited < Capybara.default_wait_time sleep delay seconds_waited += 1 end raise "Waited for #{Capybara.default_wait_time} seconds but condition did not become true" unless yield end
나는 할 수 있도록
wait_until { Comment.count == 0 }
시험한다.
또 다른 방법은 블록 요청이 시험이 끝난 후 만들어진 것으로 랙 미들웨어를 추가하는 것입니다. 이 접근법은 여기에 자세히 설명되어 있습니다 : http://www.salsify.com/blog/tearing-capybara-ajax-tests 나는 그것이 RSpec에 기능 사양의 좋은 크기의 스위트 룸에 데이터 유출을 해결하는 매우 좋은 일을 보았다.
-
==============================
2.https://github.com/jnicklas/capybara#asynchronous-javascript-ajax-and-friends
https://github.com/jnicklas/capybara#asynchronous-javascript-ajax-and-friends
from https://stackoverflow.com/questions/23554882/why-does-adding-sleep-1-in-an-after-hook-cause-this-rspec-capybara-test-to-pas by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] Omniauth : 콜백은 "잘못된 자격 증명"을 반환 실패를 발사하지 (0) | 2020.02.26 |
---|---|
[RUBY-ON-RAILS] PGError는 오류 : 골재는 객체의 AR 쿼리와 has_many 개체에 WHERE 절에 사용할 수 없습니다 (0) | 2020.02.26 |
[RUBY-ON-RAILS] 단일 페이지 응용 프로그램 및 CSRF 토큰 (0) | 2020.02.26 |
[RUBY-ON-RAILS] 왜 루비 온 레일즈는 "음이 배열 'ruby_check_sizeof_voidp'의 크기"오류가 발생 설치합니까? (0) | 2020.02.26 |
[RUBY-ON-RAILS] 사용 중단 경고 : 위험한 쿼리 방법 :> = 5.2 액티브에서 임의의 기록 (0) | 2020.02.26 |