Rspec 在散列中断言一些键/值对

Rspec 在散列中断言一些键/值对,rspec,puppet,Rspec,Puppet,我有一个define,它接受散列: Hash[String, Variant[String,Integer,Undef]] $property_additions; 我可以用下面的rspec测试这个属性 it { is_expected.to contain_my__define('instance-name').with_property_additions({ 'my_first_property' => 'my_first_value', 'my_s

我有一个define,它接受散列:

Hash[String, Variant[String,Integer,Undef]] $property_additions;
我可以用下面的rspec测试这个属性

    it { is_expected.to contain_my__define('instance-name').with_property_additions({
      'my_first_property' => 'my_first_value',
      'my_second_property' => 'my_second_value',
      ...,
      ...,
    })}
这将测试哈希是否包含列出的值,并且仅包含列出的值。为了使用它,我需要在这里列出散列中的所有键/值对

我的问题是,我如何断言某些属性是在没有指定哈希中所有属性的情况下设置的


简单地说,我正在寻找一些rspec匹配器,比如“包含密钥值对({…})”。

我不了解您的测试设置,但要断言某个值包含一个密钥值对,您可以使用标准的
包含
匹配器并向其传递哈希:

expect(subject.attr).to include(:foo => "bar")

我认为被测试的实体是一个类,您希望它声明
My::Define[实例名称]
,而不是
My::Define
定义的类型本身。如果是后者,那么允许参数值以任何方式不同于您之前指定的参数值是毫无意义的

我的问题是,我如何断言某些属性是在没有指定哈希中所有属性的情况下设置的

如果我正确理解了这个问题,那么这是一件合理的事情,但是
rspec puppet未对此作出规定。我不能完全排除这样一种可能性,即你可以传递一个自定义的
散列
子类的参数,该子类以某种方式生成,按照你的想法生成,但即使你成功实现了,它也会变得复杂而脆弱。

这是很好的一般信息,但与这个特定问题的上下文无关。是的,在我的理解中,我无法获得此哈希实例,因此我可以将其传递给
expect(…)
。。。