Ruby 对于Capybara和SitePrism,哪种类型的断言?

Ruby 对于Capybara和SitePrism,哪种类型的断言?,ruby,rspec,capybara,site-prism,Ruby,Rspec,Capybara,Site Prism,我使用的是模式,它将HTML细节从测试的顶层抽象出来。我是用宝石做的 在我的示例中,我有一个主页(HomePage.rb): 我不想将web元素暴露在步骤定义中,而是想将其封装在HomePage的类方法中。似乎最好的方法是将断言放入主页本身的类方法中(HomePage.rb): 以上假设我也在使用include RSpec::Matchers 然后,我的方法将是步骤定义中唯一公开的内容(login.rb): 作为SitePrism的一部分,登录按钮元素有自己的内置方法来检查其存在,即: head

我使用的是模式,它将HTML细节从测试的顶层抽象出来。我是用宝石做的

在我的示例中,我有一个主页(HomePage.rb):

我不想将web元素暴露在步骤定义中,而是想将其封装在HomePage的类方法中。似乎最好的方法是将断言放入主页本身的类方法中(HomePage.rb):

以上假设我也在使用
include RSpec::Matchers

然后,我的方法将是步骤定义中唯一公开的内容(login.rb):

作为SitePrism的一部分,
登录按钮
元素有自己的内置方法来检查其存在,即:

header.has_sign_in_button?
问题

就最佳实践而言,这是在
amILoggedIn
方法中编写此断言的最推荐方式(尽管它们似乎都使用相同的指令)

expect(header)。有“登录”按钮和
标题。有“登录”按钮吗?
做两件不同的事情。第一个是断言(如果失败则引发异常),第二个只是返回布尔响应。如果您想要的是一个断言,您可以在布尔响应
assert头上断言。has\u sign\u button?
expect(header.has\u sign\u button?)。事实上,
但是来自
have\u sign\u button的失败消息将更具描述性

旧问题,但提供更新的答案

给定SitePrism现在默认使用隐式等待,正如Thomas所说,您有两个不同的方法签名和两个不同的输出

同样取决于你和谁说话,在不同的地方包括媒人被认为是不好的做法。将Cucumber与SitePrism结合使用,可以很好地分离关注点,以便在Cucumber世界中执行测试(step_定义),并将所有其他建模关注点分离到支持代码中


使用官方文档中描述的SitePrism将允许您(在使用cucumber时)访问cucumber世界中的所有rspec方法,并轻松有效地进行测试。

我已经删除了主要基于观点的问题(但在我看来,是的,这是一个很好的使用模式。嗨,托马斯。谢谢你的回答。在我个人看来,我确实更喜欢
expect
断言,因为它比
assert
选项读起来更好,特别是对于不熟悉Ruby测试代码的新手来说。你可以在,断言可以简洁地编写,并由RSpec期望提供良好的描述性消息。
class HeaderSection < SitePrism::Section
  element :sign_in_button, "a[class='signIn']"
And(/^I am not logged in/) do
  @home_page = HomePage.new    # actually, this is specified in env.rb     
  expect(@home_page.header).to have_sign_in_button
end
def amILoggedIn
  expect(header).to have_sign_in_button
end
And(/^I am not logged in/) do
  @home_page.amILoggedIn
end
header.has_sign_in_button?
expect(header).to have_sign_in_button
header.has_sign_in_button?