3

我是一个新手尝试使用 Capybara 测试我的 Rails 项目,但是当我尝试从我的 div 中检测一些字符串时,我对 page 和 page.body 的含义感到困惑:(在 :js=>true 模式下)

<div>"some content"</div>

我的一些测试将通过

page.should have_content "some content"

有些会通过

page.body.should have_content "some content"

我尝试放置内容,但只有“page.body”会给我一些有价值的信息,“page”本身什么也不会显示,而且我找不到任何关于 page 和 page.body 做了什么的可靠解释。谁能帮我?

4

2 回答 2

2

page 是当前 Capybara 会话 - 调用 #find/#first/#visit/etc 与调用 page.find(...)、page.first(...) 等相同。

page.body 返回页面的 html 源代码。

大多数时候你不想在 page.body 上调用匹配器,所以 99.9% 的时间你应该使用

page.should have_content(...) 

或等效的期望语法。这是因为在 page.body 上调用匹配器实际上是通过解析器运行返回的字符串并对其进行查询,而不是在您正在测试的浏览器中进行查询。

于 2015-06-17T20:06:35.317 回答
0

我相信这种语法已被弃用,您应该更改为:

expect(page).to have_content "some content"

这将检查您指定的内容的呈现页面。如果您不确定是否正在呈现您期望的页面并想要调试您的测试,您可以使用它puts page.body来执行此操作。

您可以在此处了解有关应该和期望的更多信息。

于 2015-06-12T12:12:38.397 回答