2017-06-20 189 views
0

我正在寫一個帶有自定義資源的食譜(其中包括)通過ssh-keygen驗證SSH密鑰。我需要測試用戶在無效輸入中輸入的情況,並且資源應該根據異常進行提升,所以我正在尋找一種方法來驗證'給出以下輸入...廚師運行失敗'。測試廚師食譜故障

如果我正確地理解了一切,Test Kitchen意味着每次聚合都會成功,ChefSpec暗示資源永遠不會真正執行(所以我的ssh-keygen調用將永遠不會被調用)。

有沒有傳統的方法來測試這種情況?

+0

是,嘲諷shellout調用任何其他庫,如記錄[這裏](https://github.com/chefspec/chefspec#ruby-libraries-file-fileutils-etc)上ChefSpec自述。並期望它提出一個例外,這應該匹配整個事情。 – Tensibai

+0

應該複製這個答案:) – coderanger

+0

@Tensibai實際的問題是不嘲笑,我想我太精確談論食譜內部。我需要測試一下我的資源是否按照預期對來自ssh-keygen的不同響應做出了響應,但ChefSpec沒有執行我的資源 - 據我瞭解,這是ChefSpec的有意模式。所以實際上我可以測試我的資源被稱爲某處,可以測試'only_if' /'not_if'警衛,但不是資源行爲本身。 – Etki

回答

1

要測試一個custom_resource的內部位,你必須告訴ChefSpec到step_into它。你是對的ChefSpec在正常情況下不執行提供者。

要獲得有關故障的適當的測試,你應該expect(:chef_run).to raise_error爲描述here in the documentation

引用文檔中的step_into

爲了運行由LWRP暴露的動作,你必須 明確地告訴Runner踏進去:

需要 'chefspec'

describe 'foo::default' do 
    let(:chef_run) do 
    ChefSpec::SoloRunner.new(step_into: ['my_lwrp']).converge('foo::default') 
    end 

    it 'installs the foo package through my_lwrp' do 
    expect(chef_run).to install_package('foo') 
    end 
end 

注意:如果你的食譜公開LWRPs,我們強烈建議您 還創建概述如下的 「包裝的匹配器」一節一庫/ matchers.rb文件。 除非您正在測試,否則您絕對不應該登陸 LWRP。從來沒有從另一個 食譜step_into LWRP!