gpt4 book ai didi

ruby-on-rails - Rspec 请求规范检查响应正文

转载 作者:行者123 更新时间:2023-12-04 23:53:12 24 4
gpt4 key购买 nike

由于 rspec 3.5 请求规范用于测试 Controller 行为以及路由测试以及带有内容的 View 的正确呈现。
最后一部分让我有点烦恼,因为我不明白 View 规范中的内容与请求规范中的内容之间的细线。

relishapp我找到了这篇文章:

expect(response.body).to include("Widget was successfully created.")



这诱使我在请求测试中包含以下内容:
describe "Index page" do
....
it 'includes a link to cars_parts' do
get "/car_overview"
expect(response.body).to include("car_parts_path")
end
....
end

此测试失败。
在 View 中,我使用 link_tocar_parts url_helper .
失败的测试转储了整个 response.body 字符串,我看到了 car_parts_path但 rspec 没有看到它。我如何更改我的测试以使其在不使用 capybara 的情况下通过,因为它现在只能用于功能规范。
毕竟我做对了还是应该将这种测试转移到其他地方?

最佳答案

我认为您可能需要将字符串更改为方法。



expect(response.body).to include("car_parts_path")



expect(response.body).to include(car_parts_path) # Remove the quotes

解释
car_parts_path是 Rails 中的一种方法,它将评估为实际路径。如果您在 View 中使用该 URL 助手,这应该可以工作。

但我认为响应体是一个字符串?

是的,是的。当您调用 car_parts_path ,您正在调用 Rails 框架中的 Ruby 方法。
car_parts_path返回 一个字符串。此字符串将是 "/car_parts" .

基本上,任何时候你看到 car_parts_path ,想象它是 "/car_parts"作为字符串。因为两者完全等价。

中测

因此,当您在测试中遇到此问题时:
expect(response.body).to include(car_parts_path) # car_parts_path is a method that returns "/car_parts" so it's the same as...

它的评估结果与:
expect(response.body).to include("/car_parts")

在 View 中

在您的 ERB View 中,您将拥有:

<%= link_to "Car Parts", car_parts_path %>

这被评估为:

<%= link_to "Car Parts", "/car_parts" %>

这将呈现 a在您的 html 中标记:
<a href="/car_parts">Car Parts</a>

结论

您正在检查 "/car_parts"在响应正文中,并且 View 包含该字符串,测试现在通过了,一切就绪!

为什么我的原始代码不起作用?

Rails 正在寻找 "car_parts_path"作为字符串 - 并且 View 在任何地方都不包含它。

您正在寻找作为字符串的方法名称,而不是方法返回的字符串。

还有什么问题,尽管问!

关于ruby-on-rails - Rspec 请求规范检查响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53613680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com