为什么我的Javascript依赖功能规范在不在Javascript模式时传递?

Joh*_*hir 5 ruby rspec ruby-on-rails capybara capybara-webkit

我有非Javascript规范和使用capybara/capybara-webkit的Javascript功能规范.

我有一些测试,我期望在非Javascript模式下失败,但他们正在通过.我在浏览器中尝试了关闭Javascript的功能,但功能确实无法按预期工作.但在Capybara,它的确有效.

我也尝试添加js: false到单个测试中,以确保我的配置中没有隐藏的内容.规范仍然通过.

硒宝石不包含在我的Gemfile中.

Dav*_*uth 2

我看到两种可能性:你的测试是正确的,但可能有某种原因导致它们意外通过,或者你的测试不正确,并且当你在 Javascript 中运行它们时,由于错误的原因而通过。

关于如何调试的一些建议适用于这两种可能性:

  • 使用调试器。(如果有,请告诉我们您学到了什么。)

  • 查看单次运行规范的 Rails 日志,了解调用了哪些控制器操作以及调用的顺序。

  • 用于save_and_open_page对您的页面进行快照,并查看您的规范是否应该传递您正在查看的内容。

使用 Javascript 运行时仔细检查您的测试:

  • 使用poltergeist 驱动程序而不是 capybara-webkit 驱动程序运行它们。它提供比 capybara-webkit 更好的错误消息,并且可以配置为报告 Javascript 错误消息。

  • 用于save_screenshot拍摄页面的实际屏幕截图,并验证规范是否因虚假原因(可能是因为某些内容不在屏幕上)而通过。

如果您想确定 rspec 是否正在运行 Javascript,请使用ps查看是否有 capybara-webkit 或 phantomjs 进程正在运行。