2016-03-09 5 views
8

Я использую Rails 5 beta 3 с кабелем действия, интеграция отлично работает в разработке, но когда я пытаюсь запустить тест функции через capybara, он, похоже, не влияет на действия канала.Capybara не работает с action_cable

Я использую Portergeist и настроил puma как сервер capybara. Также я использую es5-shim и es6-shim.

Кто-нибудь еще испытал это или знает обходное решение?

Спасибо!

Редактировать

Im используя эту водосвинку ветвь настроить 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

+2

Пожалуйста, покажите вашу конфигурацию пумы как капибары сервера –

+2

Кроме того - что вы установили config.action_cable.allowed_request_origins в свой тестовый конфиг –

+0

@TomWalpole Я просто edi мой вопрос. Я думаю, что я использую ваш PR-код capybara для настройки Puma :). Кроме того, config.action_cable.allowed_request_origins не установлен. –

ответ

11

Для тестирования actioncable не установлен с Капибарой вы должны быть используя многопоточный веб-сервер. Так как вы используете текущий запрос тянуть на Капибара, который поддерживает регистрирующий именованные драйвера вам нужно будет указать с именем сервера использовать

Capybara.server = :puma 

Для тех, кто не использует водосвинку ветвь с именованными серверами, которые вы можете сделать

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

Еще раз спасибо.Надеюсь, ваш PR объединяется –

+1

Как главный разработчик Capybara - я тот, кто определяет, когда он объединяется :) Мне нужно написать документацию для него, прежде чем объединить его –

+1

@ SergioMárquez Я как-то случайно проголосовал за ваш вопрос - мог вы отредактируете его немного, чтобы я мог удалить этот голос –

6

От 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

+0

в v2.7.0, puma уже является зарегистрированным веб-сервером. Capybara.server =: puma будет работать нормально. – efoo