2015-12-11 108 views
0
  • 使用木偶3
  • 測試使用RSpec的木偶
  • 遍歷散列的數組使用定義類型
  • 得到一個錯誤,告訴我,我的參數(默認到$ title的值)不能以我的方式訪問,因爲它不是Array或Hash

我在puppet模塊中使用舊式迭代,創建一個定義的類型以遍歷數組的哈希。我試圖在rspec-puppet中爲這個定義編寫一個測試,試圖使用let()將散列分配給:title。然後$title應該被設置爲我的變量$daemon,但我的測試不斷拋出錯誤說$daemon不是一個散列或數組。Rspec的木偶:定義類型迭代

下面是我如何創建我的定義類型:

define my_module::daemon_install ($daemon = $title) { 

    package {"${daemon['package_name']}": 
    ensure => "${daemon['package_version']}", 
    } 

    file {"${some_fact}/${daemon['binary']}.conf": 
    ensure => file, 
    content => "blah" 
    notify => Service["${daemon['name']}"], 
    } 

    service {"${daemon['name']}": 
    ensure => running, 
    enable => true, 
    } 
} 

這裏就是我正在嘗試設置標題:

describe 'my_module::daemon_install' do 

    context 'with foo' do 

    let(:title) { 
     { 
     "name" => "foo", 
     "package_name" => "bar", 
     "package_version" => "1.0.1", 
     "binary" => "food", 
     } 
    } 

    # ... 

    end 
end 

而這裏的錯誤:

daemon is not a hash or array when accessing it with package_version

我實際上喜歡使用定義的類型進行迭代,並且非常新的所以我不確定我是否在這裏丟失了一些明顯的東西。

但爲什麼它只是抱怨package_version而不是package_name?更重要的是:爲什麼它不是一個散列,當(我相信)我在規格文件中正確設置它爲散列。

我應該提一下,使用此定義類型的類的另一個測試可以成功完成。所以它似乎與我直接測試定義時如何設置標題有關,如果我猜測。

回答

1

Rspec始終將title轉換爲String

使用$namedefine(),而不是$title並添加以下爲測試:

let :title do 
    { ... } 
end 

let :params do 
    { :name => title } 
end 

請注意$name應該是平等的$title