Capybara 不使用 action_cable

Posted

技术标签:

【中文标题】Capybara 不使用 action_cable【英文标题】:Capybara not working with action_cable 【发布时间】:2016-06-24 03:47:52 【问题描述】:

我正在使用带有动作电缆的 Rails 5 beta 3,集成在开发中运行良好,但是当我尝试通过 capybara 运行功能测试时,它似乎没有达到通道动作。

我正在使用 Portergeist 并将 puma 配置为 capybara 的服务器。我也在使用 es5-shim 和 es6-shim。

有其他人经历过这种情况或知道任何解决方法吗?

谢谢!

编辑

我正在使用这个 capybara 分支在 Capybara 中配置 Puma

Capybara.register_server :puma do |app, port, host|
  require 'puma'
  Puma::Server.new(app).tap do |s|
    s.add_tcp_listener host, port
  end.run.join
end

我没有在 config.action_cable.allowed_request_origins 上设置任何东西

【问题讨论】:

请显示您的 puma 作为 Capybaras 服务器的配置 另外 - 您在测试配置中将 config.action_cable.allowed_request_origins 设置为什么 @TomWalpole 我刚刚编辑了我的问题。我想我正在使用您的 capybara PR 来配置 Puma :)。此外,未设置 config.action_cable.allowed_request_origins。 好的——我没有尝试在测试环境中使用未知端口、名称等配置 allowed_request_origins 我只是在我的 test.rb 中设置了config.action_cable.disable_request_forgery_protection = true——它允许来自任何位置的连接 从这里:github.com/rails/rails/tree/master/… 【参考方案1】:

要使用 Capybara 测试 actioncable,您需要使用多线程网络服务器。由于您在 Capybara 上使用支持注册命名驱动程序的当前拉取请求,因此您需要指定要使用的命名服务器

Capybara.server = :puma

对于不使用带有命名服务器的 capybara 分支的任何人,您都可以这样做

Capybara.server |app, port| 
  require 'puma'
  Puma::Server.new(app).tap do |s|
    s.add_tcp_listener Capybara.server_host, port
  end.run.join

【讨论】:

再次感谢。希望你的 PR 被合并 作为 Capybara 的主要开发人员 - 我是决定何时合并的人 :) 我需要在合并之前为其编写文档 @SergioMárquez 我不小心对你的问题投了反对票——你能稍微编辑一下,这样我就可以删除那个投票了 我应该把这个水豚配置放在哪里? @marcpt 无论你在哪里配置 Capybara——通常是 rails_helper.rb 或 spec_helper.rb——如果你使用 Capybara master 分支,你现在可以指定Capybara.server = :puma【参考方案2】:

从 Capybara v2.7.0 开始,将块传递给 Capybara::server 已被弃用 (commit)。

Deprecation message: DEPRECATED: Passing a block to Capybara::server is deprecated, please use Capybara::register_server instead

要注册新的网络服务器(例如puma),请使用:

  Capybara.register_server :puma do |app, port, host|
    require 'puma'
    Puma::Server.new(app).tap do |s|
      s.add_tcp_listener host, port
    end.run.join
  end

链接到documentation

【讨论】:

在 v2.7.0 中,puma 已经是一个注册的网络服务器。 Capybara.server = :puma 可以正常工作。

以上是关于Capybara 不使用 action_cable的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Capybara 测试 OPTIONS 请求?

如何使用 capybara 使用验证码登录表单?

Capybara click_link 有时不起作用

Rails、Cucumber、Capybara:会话不持久

资产预编译后,RSpec / Capybara测试不会通过

Rspec/Capybara 正在加载,循环要求被认为是有害的