如何在 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

瞧!