如何在 Docker 中测试带有 Capybara 和 poltergeist 的 ActionCable?
How to test ActionCable with Capybara and poltergeist inside Docker?
我需要在 dockerized rails 应用程序中测试 ActionCable 功能,运行 使用 Poltergeist (PhantomJS) 进行 JS 测试。
我试过 selenium-webdriver,chromedriver,headless chrome... 没有用。
当然,将 Puma 设置为 Capybara 服务器。
我找到了解决方案。问题来了,因为我使用 orats
生成了我的应用程序,它预先配置了与 Web 服务器分离的 ActionCable(作为单独的 docker 容器)。
添加以下内容以使其工作:
# rails_helper.rb
Capybara.server = :puma
# docker-compose.yml
services:
...
tests:
depends_on:
- 'redis'
- 'postgres'
- 'box'
build: .
volumes:
- '.:/app'
volumes_from:
- box # busybox image to cache bundle install
env_file:
- '.env'
environment:
RAILS_ENV: test
ACTION_CABLE_MOUNT: '/cable'
command: /bin/true
# config/environments/test.rb
config.action_cable.url = nil
config.action_cable.mount_path = ENV["ACTION_CABLE_MOUNT"]
然后运行
docker-compose run tests bundle exec rspec
瞧!
我需要在 dockerized rails 应用程序中测试 ActionCable 功能,运行 使用 Poltergeist (PhantomJS) 进行 JS 测试。
我试过 selenium-webdriver,chromedriver,headless chrome... 没有用。
当然,将 Puma 设置为 Capybara 服务器。
我找到了解决方案。问题来了,因为我使用 orats
生成了我的应用程序,它预先配置了与 Web 服务器分离的 ActionCable(作为单独的 docker 容器)。
添加以下内容以使其工作:
# rails_helper.rb
Capybara.server = :puma
# docker-compose.yml
services:
...
tests:
depends_on:
- 'redis'
- 'postgres'
- 'box'
build: .
volumes:
- '.:/app'
volumes_from:
- box # busybox image to cache bundle install
env_file:
- '.env'
environment:
RAILS_ENV: test
ACTION_CABLE_MOUNT: '/cable'
command: /bin/true
# config/environments/test.rb
config.action_cable.url = nil
config.action_cable.mount_path = ENV["ACTION_CABLE_MOUNT"]
然后运行
docker-compose run tests bundle exec rspec
瞧!