在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
答案 0 :(得分:1)
您可以使用reload方法使用主键查找重新加载对象。此重新加载就位,因此它将修改您的original_product
变量。
original_product.reload
expect(original_product.name).to eq('Foomaster 9000')
expect(original_product.price).to eq(12_34)