2015-10-06 38 views
0

我已經編寫了以下serverspec資源類型以檢查密鑰是否具有某些YAML配置文件的正確值我擁有 對於散列表中的每個密鑰我在資源類型實例上分配一個屬性。如果某個鍵不存在,我想用適當的消息失敗。
在挖掘rspec的代碼後,我發現如果我混入RSpec::Expectations模塊,我可以調用fail_with(),它應該報告測試失敗。 但是我從調用fail_with()的行中得到一個SystemStackError,表示「堆棧級別太深」。我猜測我做錯了。有沒有辦法讓測試失敗並顯示一條合理的消息?如何向RSpec發信自定義Serverspec資源類型的預期失敗

require 'yaml' 

module Serverspec 
    module Type 

    class YAMLFile < Base 
     include RSpec::Expectations 

     def initialize(path) 
     yaml = YAML.load_file(path) 
     return unless yaml 

     yaml.each { |key, value| self.send('#{key}=', value) } 
     end 

     def method_missing(m, *args, &block) 
     # fail here with message 
     self.fail_with('The key does not exist in the YAML file') 
     end 
    end 

    def yaml_file(path) 
     YAMLFile.new(path) 
    end 
    end 
end 

include Serverspec::Type 

回答

0

的解決方案是使用fail()方法而不是fail_with()。 我仍然不知道爲什麼我不能使用fail_with()。 以下是供將來參考的工作代碼:

require 'yaml' 

module Serverspec 
    module Type 

    class YAMLFile < Base 
     def initialize(path) 
     yaml = YAML.load_file(path) 
     return unless yaml 

     yaml.each { |key, value| self.send('#{key}=', value) } 
     end 

     def method_missing(m, *args, &block) 
     fail "The key '%s' does not exist in the YAML document" % m 
     end 
    end 

    def yaml_file(path) 
     YAMLFile.new(path) 
    end 
    end 
end 

include Serverspec::Type