更简洁的测试方法是在Rails 3中修改数据库条目

时间:2015-04-24 06:34:31

标签: ruby-on-rails ruby ruby-on-rails-3 rspec rails-activerecord

在Rails 3中使用RSpec的以下集成测试中,我必须使用new_product = Product.find(product)来获取更改数据库中的内容的结果。这感觉有点单一。

有没有办法告诉ActiveRecord对象转到数据库并获取自创建对象以来发生的任何更改?

或者,是否有更自然的方式来指定数据库已针对此条目进行了修改?

require 'rails_helper'

describe 'admin' do
  it 'should edit a product' do
    original_product = create(:product)

    visit products_path
    # ASSUMPTION: Only one product on page.
    click_link 'Edit product'

    fill_in 'product_name', with: 'Foomaster 9000'
    fill_in 'product_price', with: '12.34'

    click_button('Save product')

    # REVIEW: Can the following line be improved?
    new_product = Product.find(original_product)

    # original_product still has old values for product_name and price
    expect(new_product.product_name).to eq('Foomaster 9000')
    expect(new_product.price).to eq(12_34)
  end
end

1 个答案:

答案 0 :(得分:1)

您可以使用reload方法使用主键查找重新加载对象。此重新加载就位,因此它将修改您的original_product变量。

original_product.reload
expect(original_product.name).to eq('Foomaster 9000')
expect(original_product.price).to eq(12_34)