为什么RSpec/Capybara没有显示错误发生的位置?

6

我正在使用带有 Webkit 的 Capybara 进行测试,但是出现测试失败时,它会显示错误,但不会指示在代码中实际发生了什么问题。

Failures:

  1) online shopping -  sign up
     Failure/Error: page.should have_content 'Payment added successfully'
       expected there to be content "Payment added successfully" in "Internal Server Error undefined method `client_id' for #<InvoicePayment:0x007fbd5b834008> WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20) at 127.0.0.1:60324"
     # ./spec/requests/online_shopping_spec.rb:140:in `block (2 levels) in <top (required)>'

当使用save_and_open_page时,它只会显示错误,而没有提供出错位置的信息:

内部服务器错误

undefined method `client_id' for # WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20) at 127.0.0.1:60324

我期望看到的是错误发生的行号和函数:

app/controllers/invoices_controller.rb:30:in `show'

我在Google上找不到相关的信息。也许我使用了不正确的术语。有人知道如何解决这个问题吗?

你可能已经放弃了,但是你找到解决方案了吗?我也有同样的问题,找不到解决方案。 - simha
啊..我刚刚注意到,当我加上js:true时,它不会显示给我精确的错误追踪。当我移除js:true时,它会显示给我错误发生的精确行数。 - simha
2个回答

8

基本上,Capybara并不知道应用程序的情况,因为它在不同的进程中运行。您可以使用此处描述的技巧解决此问题:https://gist.github.com/1443408


谢谢,那个链接看起来很有前途! - Constant Meiring

3
问题在于由于错误,实际页面未能呈现,而是出现了内部服务器错误。因此,Internal Server Error undefined method...是您正在测试的页面内容。RSpec/Capybara无法告诉您发生错误的位置,因为测试框架只测试您实际在页面上看到的内容,而这正是您所看到的(当您运行save_and_open_page时确认的)。
要查找错误,您应查看rails错误日志或从中运行的控制台/终端。如果没有更多信息,我无法帮助您跟踪错误。
希望这有所帮助。

奇怪的是,在我正在开发的另一个应用程序中,终端明确地指出了代码哪一行出错了! - Constant Meiring

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接