У меня есть 2 файла спецификаций, которые используют разные образы докеров и, следовательно, предполагают запуск отдельных и разных контейнеров докеров для запуска примеров.
В приведенных ниже фрагментах я использую гем serverspec
для проверки своих контейнеров
спецификация / dockerfile / ember_spec.rb
require 'spec_helper'
require 'shared_examples/release'
describe 'ember' do
before(:all) do
@image = Docker::Image.build_from_dir(image_path('ember'))
set :os, family: :alpine
set :backend, :docker
set :docker_image, @image.id
set :docker_container_create_options, { 'Entrypoint' => ['/bin/sh'] }
end
describe command('ember version') do
its(:stdout) { should contain 'ember-cli: 3.3.0' }
its(:stdout) { should contain 'node: 10.10.0' }
end
include_examples 'os release', 'Alpine Linux'
end
спецификация / dockerfile / gerbv_spec.rb
require 'spec_helper'
require 'shared_examples/release'
describe 'gerbv' do
before(:all) do
@image = Docker::Image.build_from_dir(image_path('gerbv'))
set :os, family: :debian
set :backend, :docker
set :docker_image, @image.id
set :docker_container_create_options, { 'Entrypoint' => ['/bin/sh'] }
end
describe package('gerbv') do
it { should be_installed }
end
include_examples 'os release', 'Ubuntu 18.04'
end
Однако при запуске bundle exec rspec
совершенно ясно, что один и тот же контейнер используется для запуска каждого файла спецификаций. Я подтвердил это, распечатав работающие контейнеры перед каждым из примеров. Это, конечно, приводит к сбою спецификаций для одного из файлов (в зависимости от того, что запускается вторым).
Когда файлы запускаются независимо с помощью bundle exec rspec path/to/file
, тогда все спецификации проходят.
Есть ли способ принудительно запустить контейнер после запуска примеров в одном файле и создания нового контейнера для другого набора примеров?