2017-03-04 59 views
3

這可能是嘲諷的資源的一個簡單的事情,但是......如何RSPEC測試木偶類時的參數需要一個資源引用

class myclass (
    String stringParam, 
    Integer intParam, 
    File fileParam 
) { 
# do some things 
$path = fileParam['title'] 
$mode = fileParam['mode'] 
# do some more things 
} 

現在我想寫一個RSpec木偶測試這個班。我如何創建或模擬一個文件資源,並將其放入rspec-puppet使用的目錄中,以便我可以參考它?

thisthis的答案讓我在那裏,但我試過的一切都導致myClass抱怨它正在傳遞一個字符串而不是文件引用。

... 
let(:params) {{ 
    :stringParam => 'Here is my string', 
    :intParam => 238, 
    :fileParam => *??????,* 
}} 

回答

1

沒有在rspec的木偶此真多的支持,從:params假定只有字符串(或嵌套的散列/陣列等。含有字符串)或幾個產生一類測試參數列表允許使用的符號值幾乎是字面上的,:undef:default。它沒有傳遞資源引用的方法。

存在一種解決方法,通過傳遞響應inspect方法的對象,可以讓文字內容放入清單中。例如,在你的spec_helper.rb

class ResourceReference 
    def initialize(ref) 
    @ref = ref 
    end 

    def inspect 
    @ref 
    end 
end 

,然後在規格:

let(:params) {{ 
    :stringParam => 'Here is my string', 
    :intParam => 238, 
    :fileParam => ResourceReference.new("File[/etc/foo]"), 
}} 

rspec的木偶會調用ResourceReference對象返回你所傳遞的字符串的方法inspect此。應該放置在清單中不變。

(這原本是用來作爲undef一種變通方法,它現在可以作爲:undef傳遞。)

順便說一句,你可以設置let(:pre_condition) { "..." }字面內容添加到測試生成的class { ... }前表現,但我認爲這裏沒有辦法使用它。

我強烈建議對rspec-puppet提交一個功能請求。

+0

如果您使用let(:pre-condition)實例化一些資源,然後使用此解決方法來獲取對它們的引用,請小心(一如既往)關於評估順序;在需要資源之前,您不能指望存在的資源的屬性。 –