the*_*tto 4 ruby rspec ruby-on-rails
我有一个非常简单的模型Reminder,使用布尔属性调用,verified我想测试我的方法update_verified,只需将属性设置verified为true.我正在使用rspec和工厂女孩.
# reminder.rb
def update_verified
self.update(verified: true)
end
# reminder_spec.rb
describe "#update_verified" do
it "should mark the reminder.verified to true" do
reminder = build(:reminder, verified: false)
reminder.update_verified
expect(reminder.verified).to eq(true)
end
end
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我运行测试时,true属性的新值verified不会被持久化.但是,当我在控制台中运行该方法时,它工作正常.思考?
1) Reminder#update_verified should mark the reminder.verified to true
Failure/Error: expect(reminder.verified).to eq(true)
expected: true
got: false
(compared using ==)
# ./spec/models/reminder_spec.rb:46:in `block (3 levels) in <top (required)>'
Finished in 0.19193 seconds (files took 7.07 seconds to load)
Run Code Online (Sandbox Code Playgroud)
Fra*_*ang 10
这对我有用
expect do
reminder.update_verified
reminder.reload
end.to change(reminder, :verified).from(false).to(true)
Run Code Online (Sandbox Code Playgroud)
我发现这有助于检查该方法是否将更改保存到数据库中的对象:
expect { reminder.update_verified }.to change(reminder, :updated_at)
Run Code Online (Sandbox Code Playgroud)
说明
调用self.update(verified: true)不仅会更新verified-column,还会更新updated_at-column。然后,我们可以检查updated_at-column中的更改,以验证是否已保存对对象的更改。
| 归档时间: |
|
| 查看次数: |
9212 次 |
| 最近记录: |