Во-первых, я использую serverspec 2.3.1 и 2.4.2, specinfra с Рубином 1.9.3p550Первый «должен be_installed» в тест всегда терпит неудачу на Windows,
Я до сих пор исследования проблемы, но я понял, Я бы постарался спросить здесь, если кто-то столкнулся с проблемой раньше (а если нет, и я понял это, возможно, следующий человек, столкнувшийся с ней, найдет этот ответ в Google).
Цель состоит в том, чтобы иметь спецификационный файл со всеми программными обеспечением, которые должны быть установлены в тестовой системе. Что странно, но это то, что независимо от того, что я пишу, в первый раз, когда я делаю it { should be_installed }
, это провалится. Никаких исключений.
Приведенный ниже код показывает, что я имею в виду:
require 'acceptance_helper'
describe package('7-Zip 9.22 (x64 edition)') do
it { should be_installed }
end
describe package('7-Zip 9.22 (x64 edition)') do
it { should be_installed }
end
describe package('Zend Server') do
it { should be_installed }
end
describe package('SQL Server 2012 Management Studio') do
it { should be_installed }
end
describe package('Microsoft SQL Server 2012 (64-bit)') do
it { should be_installed }
end
Когда я запускаю этот файл, я получить первый тест, который говорит, что 7-Zip не установлен и второй тест будет сказать это. Все, что я ставлю в качестве первого теста, делает то же самое.
Package "7-Zip 9.22 (x64 edition)"
should be installed (FAILED - 1)
Package "7-Zip 9.22 (x64 edition)"
should be installed
Package "Zend Server"
should be installed
Package "SQL Server 2012 Management Studio"
should be installed
Package "Microsoft SQL Server 2012 (64-bit)"
should be installed
Failures:
1) Package "7-Zip 9.22 (x64 edition)" should be installed
Failure/Error: it { should be_installed }
TypeError:
can't convert Symbol into Integer
uname -s
#< CLIXML
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><S S="Error">The term 'uname' is not recognized as the name of a cmdlet, function, script fi_x000D__x000A_</S><S S="Error">le, or operable program. Check the spelling of the name, or if a path was inclu_x000D__x000A_</S><S S="Error">ded, verify that the path is correct and try again._x000D__x000A_</S><S S="Error">At line:1 char:6_x000D__x000A_</S><S S="Error">+ uname <<<< -s_x000D__x000A_</S><S S="Error"> + CategoryInfo : ObjectNotFound: (uname:String) [], CommandNotFou _x000D__x000A_</S><S S="Error"> ndException_x000D__x000A_</S><S S="Error"> + FullyQualifiedErrorId : CommandNotFoundException_x000D__x000A_</S><S S="Error"> _x000D__x000A_</S></Objs>
# ./spec/acceptance/192.168.0.70/all_required_applications_are_installed_spec.rb:4:in `block (2 levels) in <top (required)>'
Finished in 25.96 seconds (files took 0.99763 seconds to load)
5 examples, 1 failure
Failed examples:
rspec ./spec/acceptance/192.168.0.70/all_required_applications_are_installed_spec.rb:4 # Package "7-Zip 9.22 (x64 edition)" should be installed
Что нереально для меня является то, что только первый тест потерпит неудачу, так что я действительно не знаю, что могло произойти. Я буду исследовать и обновлять этот пост, поскольку я иду, но если кто-нибудь когда-либо сталкивался с этим, мне бы очень хотелось услышать, как/если вы это исправили!
Редактировать: С сообщением об ошибке и способом тестирования ServerSpecs для пакетов в Windows, я думал, что команда была плохо выполнена, но оказывается, что ошибка происходит даже до запуска этой команды. По крайней мере, похоже, что в Intellij IDEA, когда я поставил точку останова в строке 7 specinfra/command/windows/base/package.rb
(exec "(FindInstalledApplication -appName '#{package}' #{version_selection}) -eq $true"
), точка останова никогда не была достигнута, тест не прошел, и он переходит к следующему тесту.
Редактировать 2: Удалено, чтобы изолировать проблему немного больше, похоже, что это происходит в specinfra\helper\os.rb
. Я новичок в Ruby, поэтому его немного сложно отлаживать, но я предполагаю, что что-то не инициализируется должным образом при первом запуске независимо от того, использует ли ServerSpec/SpecInfra для обнаружения ОС.
Я видел подобный вопрос с тестами, относящихся к файлам, где бы периодически выпадать с сообщением, что 'uname' не может быть найден , Установка ОС и семейства явно в spec_helper.rb, похоже, устранила проблему. Спасибо, что опубликовали это. Я посмотрю, смогу ли я открыть PR для них, чтобы обновить документацию. – sworisbreathing
https://github.com/serverspec/serverspec/pull/494 – sworisbreathing
Я рад, что это помогло! Спасибо за PR (я должен был это сделать, я не знаю, почему я об этом не думал), я уверен, что это поможет многим людям! – gCardinal