2016-03-09 1 views
8

J'utilise le Rails 5 beta 3 avec câble d'action, l'intégration fonctionne très bien en développement mais quand j'essaye d'exécuter un test de fonctionnalités via capybara, il ne semble pas toucher les actions du canal. J'utilise Portergeist et configuré puma comme serveur capybara. J'utilise aussi es5-shim et es6-shim.Capybara ne fonctionne pas avec action_cable

Est-ce que quelqu'un d'autre a connu cela ou connaît une solution de contournement?

Merci!

Modifier

Im en utilisant cette branche de capybara pour configurer Puma dans Capybara

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 

je mets rien sur config.action_cable.allowed_request_origins

+2

S'il vous plaît montrer votre configuration de pumas en tant que serveur Capybaras –

+2

également - ce avez-vous défini config.action_cable.allowed_request_origins dans votre config test –

+0

@TomWalpole je viens d'edi J'ai posé ma question. Je pense que j'utilise votre PR capybara pour configurer Puma :). En outre, config.action_cable.allowed_request_origins n'est pas défini. –

Répondre

11

Pour les tests actioncable avec Capybara vous devez être en utilisant un serveur web multithread. Puisque vous utilisez une demande de tirage en cours sur Capybara qui prend en charge l'enregistrement des pilotes nommés, vous devez spécifier le serveur nommé à utiliser

Capybara.server = :puma 

Pour ceux qui ne pas utiliser la branche capybara avec les serveurs nommés que vous pouvez faire

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

Merci encore.J'espère que votre PR se fusionne –

+1

En tant que développeur principal de Capybara - je suis celui qui détermine quand il fusionne :) J'ai besoin d'écrire la documentation avant de la fusionner –

+1

@ SergioMárquez J'ai en quelque sorte accidentellement voté votre question - pourrait vous l'éditez légèrement pour que je puisse retirer ce vote –

6

De Capybara v2.7.0 passant un bloc à Capybara::server est obsolète (commit).

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

Pour enregistrer nouveau serveur Web (par exemple puma) utiliser:

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 

Lien vers documentation

+0

dans v2.7.0, puma est déjà un serveur web enregistré. Capybara.server =: Puma fonctionnera très bien. – efoo