Ruby: Возвращает хэш-значение в заглушке

#ruby #chefspec

Вопрос:

Как правильно вернуть хэш-объект из заглушки, чтобы я не всегда получал сообщение об ошибке «Nometoderror: неопределенный метод»каждый» для nil: NilClass»?

 # ruby code to test
env_json = JSON.parse(Chef::ServerAPI.new.get("test").to_json)
env_json ['versions'].each do |name, version|
  # things to do
end
 

В своих тестах я хочу издеваться над вызовом ServerAPI.

 before(:each) do
  query = double
  allow(query).to receive(:get) do |arg1|
    case arg1.downcase
    when %r{test}
     {"versions" => { "flag2" => false } } ## return hash value
    else
     {"versions2" => { "flag2" => true } } ## return hash value
    end
  end
  allow(Chef::ServerAPI).to receive(:new).and_return(query) 
end
 

У кого-нибудь есть идея, как я должен передать хэш-значение в запросе?

Комментарии:

1. Не уверен, в чем конкретно проблема, но я могу вам сказать, что ваше регулярное выражение для «test» на самом деле ищет символ [tab], за которым следует «est».

2. То, что выводит сообщение об JSON.parse(Chef::ServerAPI.new.get("test").to_json) ошибке, указывает на то, что ['versions'] возвращает ноль Маленький совет: попробуйте эту нотацию намного яснее { versions: { flag2: false } }