如何在Capybara中显示rails错误显示在rspec功能中?

时间:2015-11-30 16:56:24

标签: ruby-on-rails rspec capybara

我使用capybara来运行我的rspec功能。问题是当运行规范时在rails堆栈中发生错误时,错误不会通过"到rspec并导致测试失败。 rspec生成并检查错误页面。

所以,我的规格错误,我不会立即失败。我只是在查找内容时遇到错误,或者尝试填写一个不会出现在错误页面上的字段。

这不是我想要的。我希望在rails堆栈中遇到错误(控制器,视图等)导致rspec立即失败。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

Capybara能够将服务器错误提升为测试失败,只要它正确地挂钩到Rails(参见:the last bullet point on the "Gotchas" section of the README)。

请确保你:

  • 在Rails环境中运行Capybara测试
  • require 'capybara/rails'spec_helper.rb档案中<{1}}
  • 为了运行测试,不需要运行实际的服务器(如果这样做,这是您的设置不正确的症状)。
  • 在您的测试中访问相对而非绝对的网址(例如rails_helper.rb错误,visit 'http://localhost:3000/mypage是对的)。

如果以上都是真的,并且您仍然看到了这种行为,那么您的设置可能还有其他问题。尝试将驱动程序更改回默认值(Rack :: Test)并查看问题是否仍然存在。

编辑:正如下面的评论中所解释的,这里的问题是visit '/mypage' gem正在测试环境中加载,它在Capybara和Rspec有机会看到之前挽救了错误并显示了漂亮的错误页面错误。将其移动到Gemfile中的better_errors - 仅限组可解决此问题。 This thread得到了答案。

答案 1 :(得分:1)

为您的控制器/视图创建一个测试用例,并在进行任何集成测试之前对其进行测试。

这是正确的方法:

  • 方法的单元测试
  • 控制器/视图的功能测试
  • 集成测试然后

答案 2 :(得分:0)

您可以使用以下capybara方法强制方案失败。

fail(msg = "Error. Check log for details.")