IISのコンポーネントをインストールするためのレシピがあります。たくさんありますので、それはwindows_feature
インストールブロックに入る配列です。同様に、Chefspecが配列に対して反復しない
strings.each do |st|
windows_feature st do
guard_interpreter :powershell_script
not_if "$ret = Get-WindowsOptionalFeature -Online -FeatureName #{st}; if ($ret.State -eq 'Disabled') { return 'false'} else {return 'true'}"
action :install
end
end
関連するChefspecブロックには、同じ配列の内容が含まれています。ブロックは、次のとおりです。
describe 'HEQIIS::IIS' do
let(:chef_run) { ChefSpec::SoloRunner.converge('HEQIIS::IIS') }
strings.each do |st|
it "installs_#{st}" do
stub_command("$ret = Get-WindowsOptionalFeature -Online -FeatureName #{st}; if ($ret.State -eq 'Disabled') { return 'false'} else {return 'true'}").and_return(false)
expect(chef_run).to install_windows_feature("#{st}")
end
end
end
私は料理本でChefspecを実行すると、私はエラーが出る:それはWebServerRole」として-Featurenameを表示し、エラーでは、
HEQIIS::IIS installs_IIS-LegacyScripts
Failure/Error: let(:chef_run) { ChefSpec::SoloRunner.converge('HEQIIS::IIS') }
ChefSpec::Error::CommandNotStubbed:
Executing a real command is disabled. Unregistered command:
command("$ret = Get-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole; if ($ret.State -eq 'Disabled') { return 'false'} else {return 'true'}")
You can stub this command with:
stub_command("$ret = Get-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole; if ($ret.State -eq 'Disabled') { return 'false'} else {return 'true'}").and_return(...)
# ./heqiis/spec/default_spec.rb:70:in `block (2 levels) in <top (required)>'
# ./heqiis/spec/default_spec.rb:75:in `block (3 levels) in <top (required)>'
、それはありません各行ごとに(30項目)。その段階で最初の項目を反復するだけであることを示します。それは、私がstub_commandブロックを使っているという事実と相まって、なぜそれが誤りであるのか本当に分かりません。誰でも考えがありますか?