2017-03-07 49 views
0

仍在学习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}

任何有识之士都会受到欢迎。

+0

你的方法的结果是这样的.'是无效的Ruby对象,请仔细检查它;) –

+0

也许这有帮助吗? http://apidock.com/rspec/Spec/Mocks/ArgumentMatchers/hash_including – trueunlessfalse

+0

真@AndreyDeineko将断言重新格式化为更多的红宝石。谢谢! – JoaWa

回答

0
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 
+0

谢谢Andrey--最终借用了这个策略。 – JoaWa

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 
0

现在回想起来,这是一个容易得多了。简单地遍历散列并期望值是最简单的方法。重构结束了我这样做:

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

感谢所有的建议,带领我走下了正确的道路。