我使用的铁轨4.0.5,rspec的2.14.1,2.2.1水豚,水豚,WebKit的1.1.0和1.2.0 database_cleaner。 我看到具有以下功能测试一些怪异的行为(它模拟观看一则讯息的评论的用户,鼠标悬停在图标使菜单出现,点击菜单项删除评论):
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的各种值有时无的是,属该评论删除的,有时它是评论的附着后,有时它的意见/帖子的作者。
如果我想补充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} .comment-delete a").click
assert(page.has_no_css? "#comment-#{comment.id}")
sleep 1
end
它还传递,如果我把sleep 1
中的after
块。
任何想法,为什么我得到这些NoMethodErrors,和/或为什么测试通过,如果我让它睡了第二所有的工作完成后?