win*_*ons 4 selenium rspec google-chrome capybara ruby-on-rails-3
我已经为我的rails 3.2应用程序编写了一些RSpec测试,因为我被浏览器弹出了ich试图从firefox改为capybara-webkit
.在此之后,所有测试仍在运行,除了一个.失败的线是:
expect { click_button "Create" }.to change(Answer, :count).by(count)
Run Code Online (Sandbox Code Playgroud)
如果我删除了expect并添加了一个方法来截取前后的截图,我可以看到测试运行正常.但是,如果我通过调试器进入低谷,日志会显示在第二个屏幕截图行之后创建记录.我可以永远等待click_button,并在执行第一行后运行相应的Controller操作.
"创建"按钮是标准的html按钮,创建操作中不涉及JS.某人对这种奇怪的行为有解释吗?
Capybara将点击操作发送到服务器和测试检查数据库之间存在竞争条件.
解决此问题的最简单方法是在检查之前等待:
expect { click_button "Create"; sleep 2 }.to change(Answer, :count).by(count)
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个.测试这个的更好方法是从最终用户的角度进行检查.
例如,单击"创建"后,用户是否在答案页面上看到答案?
fill_in :title, :with => "My answer"
click_button 'Create'
page.should have_text "My answer"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
793 次 |
最近记录: |