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的主要内容,如果未能解决你的问题,请参考以下文章