断言哈希中的一些键/值对

问题描述

我有一个定义,它接受一个散列:

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 匹配器,例如“with_key_value_pairs_included({...})”。

解决方法

我认为被测实体是您希望声明 My::Define[instance-name] 的类,而不是 My::Define 定义的类型本身。如果是后者,那么允许参数值与您之前指定的值有任何不同将毫无意义。

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

如果我正确理解了这个问题,那么这是一件合理的事情,但是 rspec-puppet 没有为此做准备。我不能完全排除您可以传递某个自定义 Hash 子类的参数的可能性,该子类以某种方式使 rspec-puppet's parameter check 像您想的那样工作,但即使您设法使之工作,它会变得复杂而脆弱。

,

我不明白您的测试设置,但要断言某些值包括键值对,您可以使用标准的 includes 匹配器并将其传递一个哈希值:

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