我的控制器方法返回一个数组,我打算检查是否包含具有特定ID的元素,例如:
expect(json_resp["animals"]).to contain_element_with_attribute(:id => 4)
答案 0 :(得分:1)
很难理解您的要求。
返回什么数组?散列?对象?
我的假设是,您希望断言其中一个散列或对象的id键值必须为4。
您可以使用RSpec Collection成员匹配器:
expect(actual).to include(expected)
与pluck
或map
命令结合使用(取决于所返回的内容,我实际上并不知道您的情况)。
let(:result) { json_resp['animals'].pluck(:id) }
# OR
let(:result) { json_resp['animals'].map { |element| element.fetch(:id) }
it 'returns an object with an id value of 4' do
expect(result).to include(4)
end
答案 1 :(得分:1)
正如您的变量名提到JSON一样,我假设您有一个哈希数组。在这种情况下,您可以使用双include
:
expect(json_resp["animals"]).to include(include("id" => 4))
外部调用说数组应该包含一个与其参数匹配的元素;然后,内部描述了如何匹配该元素:在这里,通过对哈希进行另一次include
匹配。
(请注意,我再次假设您的哈希具有字符串键,这是因为JSON;您需要使用适合数据的任何值。)
如果您的数组包含常规类,您仍然可以对数组使用include
,但对内部对象使用have_attributes
:
expect(json_resp["animals"]).to include(have_attributes(id: 4))