我有一个函数检查字符串变量是否为空,如果是,则用一个值填充它。此方法以before_save
为前缀。
我想为此编写一个rspec测试。我有一个模型工厂,其中的变量是空白的。如何在保存后测试变量是否发生变化?
到目前为止,我有,
it 'should autofill country code' do
empty_country_code = ''
@store = Factory.build(:store, :country_code => empty_country_code)
@store.save
@store.country_code.should eql '1'
end
答案 0 :(得分:1)
如果要检查数据是否更新到数据库,则应在测试运行到检查点之前再次从数据库中获取数据。
例如,如果设置before_save
方法并将country_code
更改为1
,则可以执行以下操作:
it 'should autofill country code' do
empty_country_code = '99'
@store = Factory.build(:store, :country_code => empty_country_code)
@store.save
expect(Store.find_by(id: @store.id).country_code).to eq("1") ## data get from database again
## test for more, you can do:
## @new_store = Store.find_by(id: @store.id)
## @new_store.country_code += 100
## @new_store.save
## expect(Store.find_by(id: @store.id).country_code).to eq("1")
end
此操作可确保数据库中的数据已刷新。
答案 1 :(得分:1)
我会选择这样的东西:
describe 'before_save' do
let!(:store) { Factory.build(:store, :country_code => '') }
it 'autofills the country_code' do
expect { store.save }.to change { store.country_code }.from('').to(1)
end
end