Ожидайте экземпляр определенного класса в качестве аргумента ключевого слова - PullRequest
0 голосов
/ 13 июня 2018

Мне нужно разрешить классу получать экземпляр другого класса в качестве аргумента в 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.)

1 Ответ

0 голосов
/ 13 июня 2018

Вы можете использовать hash_including вместе с instance_of сопоставителями ( вместо того, что написано как an_instance в вашем примере ):

hash_including(environment: instance_of(Puppet::Node::Environment))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...