Rspec 3并声明该值具有对象ID

时间:2014-12-17 16:39:53

标签: ruby-on-rails ruby ruby-on-rails-4 rspec rspec3

我正在使用Rspec 3并且我正在尝试编写一个测试,该测试在我的rake db:seed任务填充的db中测试值

到目前为止,我已经提出了

describe "Component Data" do
  it 'Should have its values in the db' do
    expect(Component.where(component_name: 'Literacy')).to eq(id: 1)
  end
end

现在这是一个错误

  Failure/Error: expect(Component.where(component_name: 'Literacy')).to eq(id: 1)

   expected: {:id=>1}
        got: #<ActiveRecord::Relation [#<Component id: 1, component_name: "Literacy", created_at: "2014-12-17 16:33:57", updated_at: "2014-12-17 16:33:57">]>

   (compared using ==)

   Diff:
   @@ -1,2 +1,2 @@
   -:id => 1,
   +[#<Component id: 1, component_name: "Literacy", created_at: "2014-12-17 16:33:57", updated_at: "2014-12-17 16:33:57">]

所以我可能以错误的方式看待这个,我想要检查的是,1的Component Id实际上具有component_name值'Literacy'

如果有人能指出我正确的方向,我将不胜感激

由于

3 个答案:

答案 0 :(得分:3)

你可以这样做:

describe "Component Data" do
  it 'Should have its values in the db' do
    expect(Component.find_by(component_name: 'Literacy').id).to eq(1)
  end
end

答案 1 :(得分:3)

  

所以我可能以错误的方式看待这个,我想要检查的是,1的Component Id实际上具有&#39; Literacy&#39;

的component_name值

如果这真的是你想要的,那就这样做:

expect(Component.find(1).component_name).to eql('Literacy')

答案 2 :(得分:2)

您正在将ActiveRelation对象与哈希({id: 1})进行比较。比较id,如下所示。

expect(Component.where(component_name: 'Literacy').first.id).to eq(1)