Как сообщить RSpec, что ожидание не выполнено для пользовательского типа ресурса Serverspec
Ниже я написал тип ресурса serverpec для проверки, имеют ли ключи правильные значения для некоторых файлов конфигурации YAML, которые у меня есть. Для каждого ключа в хэш-таблице я назначаю атрибут для экземпляра типа ресурса. Если ключ не существует, я хотел бы потерпеть неудачу с соответствующим сообщением.
Покопавшись в коде rspec, я обнаружил, что если я RSpec::Expectations
модуль, который я могу вызвать fail_with()
который должен сообщить, что тест не пройден. Однако я получаю SystemStackError
с линии, которая вызывает fail_with()
что говорит "уровень стека слишком глубоко". Я предполагаю, что я делаю это неправильно. Есть ли способ сделать тест неудачным с помощью сообщения, которое имеет смысл?
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
1 ответ
Решение состоит в том, чтобы использовать 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