rspec-检查数组是否包含具有指定ID的元素

时间:2018-08-24 08:48:21

标签: ruby-on-rails rspec

我的控制器方法返回一个数组,我打算检查是否包含具有特定ID的元素,例如:

expect(json_resp["animals"]).to contain_element_with_attribute(:id => 4)

2 个答案:

答案 0 :(得分:1)

很难理解您的要求。

返回什么数组?散列?对象?

我的假设是,您希望断言其中一个散列或对象的id键值必须为4。

您可以使用RSpec Collection成员匹配器:

expect(actual).to include(expected)

pluckmap命令结合使用(取决于所返回的内容,我实际上并不知道您的情况)。

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))