Capybara:生成服务器时如何运行代码?

Posted

技术标签:

【中文标题】Capybara:生成服务器时如何运行代码?【英文标题】:Capybara: how to run code when server is spawned? 【发布时间】:2018-07-18 09:34:56 【问题描述】:

我有一个带有 WebPack 的 Sinatra 应用程序,当我在开发中启动我的应用程序时,我会生成一个运行 Webpack Dev Server 的进程并使用 RackProxy 来提供来自我的 Sinatra 应用程序的资产。

当 Capybara 生成 ruby​​ 服务器时,我还必须在运行我的 JS Capybara 验收测试时运行 Webpack Dev Server。

到目前为止,我已经想出将 WDS 启动放在驱动程序寄存器块中,但我有不同的驱动程序。

Capybara.register_driver :headless_chrome do |app|
  Rack::WebpackProxy.start_server

  Capybara::Selenium::Driver.new(app, browser: :chrome, args: ["headless"])
end

Capybara 服务器生成时运行代码的钩子是什么?

【问题讨论】:

***.com/questions/8413443/… 我认为应该有所帮助 嗨,马克,不完全是,当水豚生成它的服务器时,我需要做一些工作,而不是配置驱动程序或服务器。 【参考方案1】:

Capybara.server= 获取启动服务器时使用的服务器 proc 的注册名称,您可以使用 Capybara.register_server 注册自己的名称。因此,您应该能够做类似的事情

Capybara.register_server :my_server do |app, port, host, **options|
  # start whatever you need started here
  do_my_stuff
  Capybara.servers[:puma].call(app, port, host) # assuming you want puma as the actual server
end

Capybara.server = :my_server

【讨论】:

以上是关于Capybara:生成服务器时如何运行代码?的主要内容,如果未能解决你的问题,请参考以下文章

清理测试数据库,仅使用RSPEC和Capybara运行测试生成的数据

Capybara 不使用 action_cable

ruby Capybara配置运行webpack dev服务器进行e2e测试

当 css id 和 name 都是动态生成时,Capybara 从嵌套下拉列表中选择

如何使用惰性加载器捕获 Capybara Feature JS 测试的服务器端错误?

Capybara会议未在测试结束时结束