资产预编译后,RSpec / Capybara测试不会通过

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了资产预编译后,RSpec / Capybara测试不会通过相关的知识,希望对你有一定的参考价值。

我使用RSpec和Capybara测试我的应用程序时遇到问题。测试正在通过,直到我没有使用rails assets:precompile

其中一个问题是Capybara函数click_button "Button"调用提交按钮。何时使用一次没有任何反应。我使用它两次时问题解决了:

click_button "Button"
click_button "Button"

在这种情况下,测试再次通过。我不知道rails assets:precompile被破坏了什么。

答案

运行rails assets:precompile有时会导致Rails不再检测资产更改的状态,并且不会在测试环境中动态重新编译它们。你通常可以通过运行rails assets:clobber来解决这个问题。

至于需要点击两次按钮,这通常意味着你在一些需要JS完全加载之前尝试点击。您可以通过休眠几秒钟然后单击按钮来验证。

sleep 5
click_button "Button"

要正确解决这个问题,您需要在页面准备好使用之前检查页面上看不到的内容。

expect(page).to have_css('some_selector.ready`) # verify element, class name on element, etc that isn't there until page is ready
click_button "Button"

以上是关于资产预编译后,RSpec / Capybara测试不会通过的主要内容,如果未能解决你的问题,请参考以下文章

RAILS_ENV=生产轨道资产:预编译不适用于 RSpec

清理测试数据库,仅使用RSPEC和Capybara运行测试生成的数据

使用 RSpec + capybara-webkit 检查 JS 框是不是存在

使用 capybara 进行 rspec2 验收测试

如何使用rails cucumber,rspec,capybara在视图(dhtml)中测试动态部分?

宝石更新后:测试失败,“资产未声明为在生产中预编译”