2017-02-20 8 views
2

다음은 serverpec 레시피에서 다음 테스트를 수행합니다. 해시는 Chef에서 설명한대로 전체 리소스입니다 (어느 시점에서 파이프를 바꿀 수 있기를 바랍니다).serverspec의 명령 자원에 변수를 사용합니다.

# Test Folder Permissons 
# hash taken from attributes 
share = { 
    "name" => "example", 
    "sharepath" => "d:/example", 
    "fullshareaccess" => "everyone", 
    "ntfsfullcontrol" => "u-dom1/s37374", 
    "ntfsmodifyaccess" => "", 
    "ntfsreadaccess" => "everyone" 
    } 

# Explicitly test individual permissions (base on NTFSSecurity module) 
describe command ('get-ntfsaccess d:/example -account u-dom1\s37374') do 
    its(:stdout) { should include "FullControl" } 
end 

문제는 내가 명령 자원에 변수를 넣는 것입니다. 루비를 처음 접했을 때 뭔가 빠졌는 지 궁금합니다.

명령 자원 호출이 하드 코딩되지 않고 변수를 허용하도록하고 싶습니다.

describe command ('get-ntfsaccess d:/example -account "#{ntfsfullcontrol}"') do 
    its(:stdout) { should include "FullControl" } 
end 

나는 :stdout 시험에서 변수를 사용하여 관리해야하지만, 그 명령 줄에서 작업 얻을 수 없습니다.

훨씬

답변

1

당신은이 같은 Serverspec 테스트 내부에 해시에서 변수를 사용할 수 있습니다 감사 어떤 도움 (현대 RSpec에 3 사용) :

describe command ("get-ntfsaccess #{share['sharepath']} -account #{share['ntfsfullcontrol']") do 
    its(:stdout) { is_expected.to include "FullControl" } 
end 

"#{}" 구문은 문자열 내부에 변수를 보간합니다 hash[key] 구문은 해시 값을 가져옵니다.

당신은 또한이 같은 더 많은 검사를 수행하기 위해 해시를 반복 할 수 있습니다

share.each |key, value| do 
    describe command("test with #{key} #{value}") do 
    # first loop: test with name example 
    its(:stdout) { is_expected.to match(/foo/) } 
    end 
end 
치료를했다
+0

감사 매트 - 내가 잘 당신이 삭제 한 일부 구문 문제가 있었다 - 지금 요리사에서 해시를 깨고에 . –