【问题标题】:single test failing after changing to capybara-webkit更改为 capybara-webkit 后单个测试失败
【发布时间】:2012-07-13 20:01:45
【问题描述】:

我已经为我的 rails 3.2 应用程序编写了一些 RSpec 测试,因为我被弹出的浏览器 annyoed 试图从 firefox 更改为 capybara-webkit。 在此之后,所有测试仍然运行,除了一个。失败的行是:

expect { click_button "Create" }.to change(Answer, :count).by(count)

如果我删除期望并添加一个在前后截屏的方法,我可以看到测试运行正确。但是,如果我使用 Debugger,日志会显示记录是在第二个屏幕截图行之后创建的。我可以永远等待 click_button 和相应的控制器动作在下一行执行后运行。

“创建”按钮是一个标准的 html 按钮,创建操作不涉及任何 JS。某人对这种奇怪的行为有解释吗?

【问题讨论】:

    标签: ruby-on-rails-3 google-chrome selenium rspec capybara


    【解决方案1】:

    Capybara 将点击操作发送到服务器和您的测试检查数据库之间存在竞争条件。

    解决此问题的最简单方法是在检查之前等待:

    expect { click_button "Create"; sleep 2 }.to change(Answer, :count).by(count)
    

    我不喜欢这个。更好的测试方法是从最终用户的角度进行检查。

    例如,点击“创建”后,用户是否会在答案页面上看到答案?

    fill_in :title, :with => "My answer"
    
    click_button 'Create'
    
    page.should have_text "My answer"
    

    【讨论】:

    • 我尝试了 sleep 并且它有效,谢谢!对于第二个选项:对于这种情况是特殊的 b/c 你不想在你的测试中睡眠还是这是所有“请求”规范的推荐做法?
    • 请求测试的推荐做法。您想在其他任何地方进行大量模拟、紧密关注的测试,但对于请求规范,他们应该在尽可能少的内部知识的情况下测试整个系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多