【问题标题】:Which style of assertion with Capybara and SitePrism?Capybara 和 SitePrism 的断言风格是什么?
【发布时间】:2017-07-21 14:22:05
【问题描述】:

我正在使用PageObject 模式,它将HTML 细节从测试的顶层抽象出来。我正在使用SitePrism gem 执行此操作。

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

class HomePage < SitePrism::Page
  set_url ENV['BASE_URL']
  section :header, HeaderSection, "div[class='headerSection']"

指的是一个共同的页面部分,HeaderSectionHeaderSection.rb):

class HeaderSection < SitePrism::Section
  element :sign_in_button, "a[class='signIn']"

以及我的测试的步骤定义(login.rb):

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

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

def amILoggedIn
  expect(header).to have_sign_in_button
end

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

我的方法将是唯一暴露给步骤定义的东西(login.rb):

And(/^I am not logged in/) do
  @home_page.amILoggedIn
end

作为 SitePrism 的一部分,sign_in_button 元素有自己的内置方法来检查其是否存在,即:

header.has_sign_in_button?

问题

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

expect(header).to have_sign_in_button

header.has_sign_in_button?

【问题讨论】:

  • 我已经删除了主要基于意见的问题(但在我看来,是的,这是一个很好的使用模式。

标签: ruby rspec capybara site-prism


【解决方案1】:

expect(header).to have_sign_in_buttonheader.has_sign_in_button? 做两件不同的事情。第一个是断言(如果失败则引发异常),第二个只是返回一个布尔响应。如果您想要的是一个断言,您可以在布尔响应assert header.has_sign_in_button?expect(header.has_sign_in_button?).to be true 上断言,但来自have_sign_in_button 的失败消息将更具描述性。

【讨论】:

  • 嗨,托马斯。感谢您的回答。在我个人看来,我自己更喜欢expect 断言,因为它也比assert 替代方案读起来更好,尤其是对于不熟悉Ruby 测试代码的外行。
  • 您可以在Capybara Test Helpers 中获得两全其美的体验,断言可以简洁地编写,并由提供良好描述性消息的 RSpec 期望提供支持。
【解决方案2】:

老问题,但提供了更新的答案

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

还取决于您与谁交谈,将匹配器包含在不同的地方被认为是不好的做法。将 Cucumber 与 SitePrism 结合使用可以很好地分离关注点,以便在 Cucumber World (step_definitions) 中执行测试,并将所有其他建模关注点与支持代码隔离开来。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2010-12-06
    • 2017-12-12
    相关资源
    最近更新 更多