Tag: capybara

为什么在后钩中添加“sleep 1”会导致此Rspec / Capybara测试通过?

我使用的是rails 4.0.5,rspec 2.14.1,capybara 2.2.1,capybara-webkit 1.1.0和database_cleaner 1.2.0。 我通过以下function测试看到一些奇怪的行为(模拟用户在post上查看评论,将鼠标hover在图标上以显示菜单,然后单击菜单项以删除评论): 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 – 我得到NoMethodError: undefined method X for nil:NilClass ,对于各种X值。有时nil是正在评论的删除,有时它是评论附加的post,有时它是评论/post的作者。 如果我在测试结束时添加sleep 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} […]