Мне нужно разрешить классу получать экземпляр другого класса в качестве аргумента в Rspec / Rspec-mocks.
В контексте я пытаюсь создать тесты Rspec для Puppet (то есть приложения Ruby).
Я хочу сказать в Rspec "что-то вроде" -
allow(Puppet::FileServing::Content.indirection).
to receive(:find).with(
"puppet:///modules/profile/logstash/logstash.json",
an_instance # an instance of Puppet::Node::Environment would go here
).and_return('bar')
Создание ложного экземпляра класса не представляется возможным, поскольку полученный экземпляр зависитна значения, вычисленные во время выполнения.
Таким образом, в моем отладчике Pry я вижу это:
=> 99: Puppet::FileServing::Content.indirection.find(
100: self[:source],
101: :environment => catalog.environment_instance
102: )
и
[1] pry(#<Puppet::Type::Elasticsearch_template>)> catalog.environment_instance
=> <Puppet::Node::Environment:70286646297160 @name="rp_env" @manifest="/Users/alexharvey/git/elk/spec/fixtures/manifests" @modulepath="/Users/alexharvey/git/elk/spec/fixtures/modules" >
Где я застрял, я не знаюне знаю, как сказать тесту «разрешить» экземпляру Puppet :: Node :: Environment получать то, что я вижу выше в отладчике.
Например, я не знаю, что это за строка«70286646297160» (я полагаю, это как-то идентифицирует экземпляр класса?).
И я не могу ссылаться на эти пути, так как они относятся к моему ноутбуку, и тесты, которые я пишу, будут только тогдаработать на моем ноутбуке.
Итак, как я могу "сказать" Rspec "разрешить" этот класс яВ моем отладчике я вижу, что его можно получить, предполагая, что это возможно.
(надеюсь, это имеет смысл.Очевидно, это немного за пределами моего знания Rspec / Ruby.)