期望将特定类的实例作为关键字参数

时间:2018-06-13 08:51:35

标签: ruby rspec

我需要允许一个类在Rspec / Rspec-mocks中接收另一个类的实例作为参数。

上下文是我正在尝试为Puppet创建Rspec测试(即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" >

我被困的地方是,我不知道如何告诉测试,以及&#34;允许&#34; Puppet :: Node :: Environment的一个实例,用于接收我在调试器中看到的内容。

例如,我不知道字符串&#34; 70286646297160&#34;是(我猜它以某种方式标识了类的实例?)。

我无法引用这些路径,因为它们是我的笔记本电脑特有的,我编写的测试只适用于我的笔记本电脑。

那么,我怎么能告诉&#34; Rspec to&#34;允许&#34;我在调试器中看到要接收的这个类实例,假设有可能这样做。

(我希望这是有道理的。显然,这有点超出了我的Rspec / Ruby知识。)

1 个答案:

答案 0 :(得分:1)

您可以将hash_includinginstance_of匹配器一起使用(,而不是示例中写为an_instance的内容):

hash_including(environment: instance_of(Puppet::Node::Environment))