シェフのInSpecで他のリソース内で1つのリソースを使用できますか?シェフのネストされたリソースInSpec
例:
describe command('su srijava') do
describe file ('/app/java/latest') do
it{ should exist }
end
end
それはのようなエラーがスローされます。
`method_missing': undefined method `file' for RSpec::ExampleGroups::CommandSuSriava:Class (NoMethodError)
は実際に私が何をしたいのか、私は他のユーザーと私にインストールされているユーティリティを実行する必要があるということですそのセッションから返された出力をチェックし、それを確認する必要があります。例:
- 私は(そのユーザーだけで
java -version
実行しているといないルートとして想定)Javaのバージョンをテストするためにコマンドを書いたインスペックで今srijavaユーザー - などのJavaをインストールしました。
- 私は
su srijava
を使用している場合、私は得ることはありません出力は ルートセッションに戻って、私はその後、私のユーティリティがエラーをスローしますsu srijava
なしで実行した場合、テストは、ユーザーがSriJavaない こと - を失敗しました
su
と
コード:
describe command('su srijava ; cd /app/java; ./java --version') do
its('stdout') { should match('1.7') }
end
コードsu
なし:
describe command('cd /app/java; ./java --version') do
its('stdout') { should match('1.7') }
end
どうすればいいですか?
'su'はターゲットユーザーとして新しいシェルを実行します。同じシェルの後のコマンドに魔法の影響を与えることはありません。 'sudo -u whatever bash -c" cd/foo; something " – coderanger
これは動作しません。私は 'コマンドの説明( 'sudo -u whatever bash -c" cd/foo; something "')を do {存在すべきです} end'のようにしました。'期待コマンドsudo -u whatever bash -c "cd/foo; something"が存在する – saurg
InSpecの 'command'リソースは' exist'マッチャーに応答しません。コマンドには、stdout/errの内容や終了状態などのためのマッチャーがあります。 – coderanger