RSpec Expect Hash包含一组键值对

时间:2017-03-07 20:02:36

标签: ruby-on-rails ruby rspec

仍在学习Rspec作为一个整体,所以感谢耐心。

返回值是:

{ supermodel: {
    'id': 1,
    'name': 'J',
    'model_attributes': [
        {attr1: 'T', attrA: 1}, 
        {attr2: 'F', attrB: 2}, 
        {attr3: 'T', attrC: 3}
        ],
    }
}

试图获得一个名为' model_attributes'的散列键的期望。包含一个包含以下键值对的数组值 - {attr2:F, attrB: 2}{attr3: T, attrC: 3}

欢迎任何见解。

3 个答案:

答案 0 :(得分:2)

describe 'Stuff' do
  let(:model_attributes) do
    [
      {attr1: 'T', attrA: 1}, 
      {attr2: 'F', attrB: 2}, 
      {attr3: 'T', attrC: 3}
    ]
  end
  let(:result) do
    { supermodel: 
      {
        'id': 1,
        'name': 'J',
        'model_attributes': model_attributes
      }
    }
  end

  it 'has the correct model_attributes value' do
    expect(result.dig(:supermodel, :model_attributes)).to eq(model_attributes)
  end
end

答案 1 :(得分:0)

尝试

describe 'ModelAttributes' do
  let(:model_attributes) { [{ attr1: 'T', attrA: 1 },
                            { attr2: 'F', attrB: 2 },
                            { attr3: 'T', attrC: 3 }] }

  it 'includes the required attributes' do
    expect(model_attributes).to include({ attr2:'F', attrB: 2 }, { attr3: 'T', attrC: 3 })
  end
end

答案 2 :(得分:0)

回想起来,现在这已经很容易了。简单地遍历哈希并期望值是最简单的方法。重构使我最终做到了这一点:

supermodel[:model_attributes].each do |attr|
    expect(attr[:attrB])to be 2
end

感谢所有的建议,让我走上了正确的道路。