我需要允许一个类在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知识。)
答案 0 :(得分:1)
您可以将hash_including
与instance_of
匹配器一起使用(,而不是示例中写为an_instance
的内容):
hash_including(environment: instance_of(Puppet::Node::Environment))