为页面对象测试存根 Capybara 会话

发布于 2024-12-05 21:17:23 字数 437 浏览 1 评论 0原文

我将 Cucumber 与类似于下面所示的简化版本的页面对象结合使用。我需要对 HTML 进行一些相当复杂的解析,因此我希望能够使用 RSpec 针对 HTML 固定装置对页面对象进行独立的单元测试,但我对此有点犹豫。我猜我需要在水豚中存根一些东西,并将其作为依赖项传递?

class SomePage
  def header
    session.find('h1').text
  end
  def title
    session.find('title').text
  end

  private
  def session
    @session ||= Capybara.current_session
  end
end

I'm using Cucumber with a page object similar to the simplified version shown below. I need to do some quite complex parsing of the HTML, so I'd like to be able to unit test the page object in isolation using RSpec against an HTML fixture, but I'm a bit stuck about to do this. I'm guessing that I need to stub something in Capybara, and pass it in as a dependency?

class SomePage
  def header
    session.find('h1').text
  end
  def title
    session.find('title').text
  end

  private
  def session
    @session ||= Capybara.current_session
  end
end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

软糯酥胸 2024-12-12 21:17:23

为了回答我自己的问题,我发现 Capybara 有一个 #string 方法,它接受一段 HTML 并返回一个:

Capybara::Node::Simple 公开了所有 Capybara::Node::Matchers 和 Capybara::Node::Finders。这允许您以与在 Capybara 会话中查询当前文档完全相同的方式查询包含 HTML 的任何字符串。

因此,我只是向我的类添加了一个初始值设定项,以允许传递此节点并用于代替 Capybara 会话。不需要存根或嘲笑,它正是我所需要的。

To answer my own question, I discovered Capybara has a #string method which accepts a chunk of HTML and returns a:

Capybara::Node::Simple which exposes all Capybara::Node::Matchers and Capybara::Node::Finders. This allows you to query any string containing HTML in the exact same way you would query the current document in a Capybara session.

So I just added an initializer to my class to allow this node to be passed and used in place of a Capybara session. No stubbing or mocking required, and it does exactly what I need.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文