对水豚的困惑 "Matchers"

Confusion on Capybara "Matchers"

所以当 "asserting" 文本时,我通常会看到大约 3-4 个不同的例子。

水豚文档甚至提到不止 1 个

assert_text('foo')

page.has_text?('bar')

page.should have_content('baz')(显然 have_content 与 have_text 相同)

expect(page).to have_content('boop')

所以...这就是检查同一事物的 4 种不同方法。我知道 expect 是一个 rspec 匹配器...但是其余的呢?我应该使用什么?不幸的是,水豚文档没有深入探讨它们之间的区别。

谢谢!

assert_text('foo') 是通常用于 minitest 的断言。

page.has_text?('bar')只是returns真假的一种方法。如果您想根据页面上文本的存在或不存在来更改行为,则可以使用它。在测试应用程序时不经常使用,因为您应该知道页面上会出现什么,而不需要根据内容执行不同的行为。不过如果 automating/scraping 会很有用。

page.should have_content('baz')(显然 have_content 与 have_text 相同) - 如您所说 - have_text 是 have_content 的别名,因此您可以使用您喜欢的任何一个。 have_content 是一个 RSpec 匹配器,仅在使用 RSpec 时使用。 should 是旧的 RSpec 语法,需要将 should 方法修补到每个对象上,此后已被 expect

取代

expect(page).to have_content('boop') - 当前 RSpec 语法

因此,如果您使用的是 minitest 测试框架,请使用 assert_xxx 样式方法,如果使用 RSpec,您可以使用 expect 样式或 should风格,尽管对于任何新事物,您可能希望使用 expect 风格。