Сборка Rakefile для тестирования портов с использованием server-spec - получение 0 примеров, 0 сбоев
В моем тестовом сценарии мне нужно проверить состояние портов на множестве различных серверов ОС. Я построил свой Rakefile следующим образом:
require 'rake'
require 'rspec/core/rake_task'
hosts = %w(
//list of Ux servers
server1
//list of Win servers
server2
)
task :spec => 'spec:all'
namespace :spec do
task :all => hosts.map {|h| 'spec:' + h.split('.')[0] }
hosts.each do |host|
short_name = host.split('.')[0]
role = short_name.match(/[^0-9]+/)[0]
desc "Run serverspec to #{host}"
RSpec::Core::RakeTask.new(short_name) do |t|
ENV['TARGET_HOST'] = host
t.pattern = "spec/{base,#{role}}/*_spec.rb"
end
end
end
Затем я добавил следующее в spec_helper.rb:
require 'serverspec'
require 'net/ssh'
set :backend, :ssh
describe port(8080) do
it { should be_listening }
end
describe port(8081) do
it { should be_listening }
end
Когда я выполняю свою тестовую команду rake spec. Вывод показывает, что не было найдено никаких примеров после того, как он прошел по всем серверам в моем списке. Что я здесь не так делаю?
Выход:
-bash-4.2$ rake spec
/usr/bin/ruby -I/home/username/.gem/ruby/gems/rspec-core-3.8.0/lib:/home/username/.gem/ruby/gems/rspec-support-3.8.0/lib /home/username/.gem/ruby/gems/rspec-core-3.8.0/exe/rspec --pattern spec/\{base,server1\}/\*_spec.rb
**No examples found.**
Finished in 0.00041 seconds (files took 0.50682 seconds to load)
**0 examples, 0 failures**
/usr/bin/ruby -I/home/username/.gem/ruby/gems/rspec-core-3.8.0/lib:/home/username/.gem/ruby/gems/rspec-support-3.8.0/lib /home/username/.gem/ruby/gems/rspec-core-3.8.0/exe/rspec --pattern spec/\{base,server2\}/\*_spec.rb
**No examples found.**
Finished in 0.00036 seconds (files took 0.05545 seconds to load)
**0 examples, 0 failures**
Установлены драгоценные камни:
diff-lcs-1.3
multi_json-1.13.1
net-scp-1.2.1
net-ssh-3.2.0
net-telnet-0.1.1
rake-12.3.2
rspec-3.8.0
rspec-core-3.8.0
rspec-expectations-3.8.2
rspec-its-1.2.0
rspec-mocks-3.8.0
rspec-support-3.8.0
serverspec-2.41.3
sfl-2.3
specinfra-2.76.9
1 ответ
В соответствии с тем, как разработан ваш Rakefile (здесь он исправлен с отступом):
require 'rake'
require 'rspec/core/rake_task'
hosts = %w(
server1
)
task :spec => 'spec:all'
namespace :spec do
task :all => hosts.map {|h| 'spec:' + h.split('.')[0] }
hosts.each do |host|
short_name = host.split('.')[0]
role = short_name.match(/[^0-9]+/)[0]
desc "Run serverspec to #{host}"
RSpec::Core::RakeTask.new(short_name) do |t|
ENV['TARGET_HOST'] = host
t.pattern = "spec/{base,#{role}}/*_spec.rb"
end
end
end
Мне кажется, что вы не должны иметь эти примеры в spec_helper.rb
а скорее у вас должен быть файл spec/base/base_spec.rb
как это:
require 'spec_helper'
describe port(8080) do
it { should be_listening }
end
describe port(8081) do
it { should be_listening }
end
Идея состоит в том, что эти тесты запускаются для всех хостов, а затем тесты для конкретной роли можно найти в spec/role/myrole_spec.rb
,
Как правило, вы не должны помещать примеры в spec/spec_helper.rb
,