模拟水豚页面对象 - 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 - 是一种与水豚和闹鬼完美结合的动物。
我正在开发一个网络爬虫,它通过远程站点的搜索栏提交搜索查询来访问远程页面:
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 - 是一种与水豚和闹鬼完美结合的动物。