模拟水豚页面对象 - Rails / RSpec

Mocking capybara page object - Rails / RSpec

我正在开发一个网络爬虫,它通过远程站点的搜索栏提交搜索查询来访问远程页面:

class Crawler < PoltergeistDriver

   def fetch_listing_page(query)
    ...
    visit 'whatever.com'
    fill_in('#seachbar', with: query)
    find('#searchbar').native.send_key(:return)
    ...
  end

end

然后我使用 page 对象来搜索正文中的特定文本,如下所示:

class Crawler < PoltergeistDriver
  ...

  def fetch_listing_data
    ...
    page.all('some element', ...)
    ...
  end

  ...

end

我的问题是我可以在测试中模拟这个 page 对象吗?我的猜测是 VCR / Webmock 不会工作,因为请求是从客户端发出的(在我的例子中是 poltergeist)。

编辑:

正如 Thomas 所建议的,我最终将 PoltergeistDriver 实例作为依赖注入。这样我就可以简单地创建另一个驱动程序 (PuffingBilly) 进行测试,并使用静态 html 模拟 page.body 的 return。

您不能为此使用 WebMock/VCR,但您可以使用可编程代理。 PuffingBilly - https://github.com/oesmith/puffing-billy - 是一种与水豚和闹鬼完美结合的动物。