我有 2 个使用不同 docker 映像的规范文件,因此假设启动单独和不同的 docker 容器来运行示例。
在下面的片段中,我使用serverspec
gem 来测试我的容器
规范/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
所有规范都通过。
在一个文件中的示例运行并为另一组示例创建新容器后,有什么方法可以强制容器停止运行?