[英]Rspec puppet module testing: access to included classes' custom facts
是否有用於為 puppet 模塊編寫規范測試的標准模式,該模式可以正確創建被測試模塊包含的模塊所需的自定義事實?
我有一個模塊,其類包含puppetlabs/mongodb ,它使用自定義事實 ::root_home (由 puppetlabs/stdlib 創建)。
查看 mongodb 的測試代碼(特別是spec_helper_local.rb ),我看到了創建 :root_home 事實以進行測試的代碼。
但是,在我自己的模塊中,除非我在自己的測試代碼中執行某些操作來創建該事實,否則我的測試將失敗並顯示“評估錯誤:未知變量”,這是完美的,因為測試套件中沒有任何內容創建該事實。
現在我可以在我的模塊的 spec_helper_local.rb 文件中創建事實,但這只會將問題踢到樓上的任何將我的模塊包含在他們的模塊中的人。
我該如何處理? 有沒有人已經編寫了遞歸下降到包含的模塊並創建測試所需的事實的代碼?
將自定義事實添加到您的測試套件設置中正是您應該做的。
正如您正確斷言的那樣,這不會幫助您模塊的下游用戶,但這錯過了測試套件的重點:完全描述評估模塊的環境。
您可以查看rspec-puppet-facts為所有測試設置默認事實(並在此過程中獲得一些其他漂亮的功能)。
我同意,必須添加模擬來對第三方代碼的使用進行實際測試是非常煩人的。 這尤其令人討厭,因為您的測試隨時可能因代碼內部的變化而失敗,例如,從 stdlib 中突然引入root_home
事實。
我在我的spec/spec_helper.rb
的頂部添加了:
if ENV.include? 'MODULEPATH'
top_path = File.dirname(File.dirname(__FILE__))
ENV['FACTERLIB'] = ENV['MODULEPATH'].split(/:/).map do |p|
p.start_with?('/') ? p : File.join(top_path, p)
end.map do |p|
Dir.glob(File.join(p, '*/lib/facter'))
end.flatten.join(':')
end
當 Facter 庫加載時,它將遵循 FACTERLIB 環境變量並評估您環境中模塊提供的所有自定義事實。
MODULEPATH
的典型值在測試環境時是“design:modules”,在測試模塊時是“spec/fixtures/modules”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.