Ruby 对于Capybara和SitePrism,哪种类型的断言?
我使用的是模式,它将HTML细节从测试的顶层抽象出来。我是用宝石做的 在我的示例中,我有一个主页(HomePage.rb): 我不想将web元素暴露在步骤定义中,而是想将其封装在HomePage的类方法中。似乎最好的方法是将断言放入主页本身的类方法中(HomePage.rb): 以上假设我也在使用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
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?