在Ruby应用程序中,我有一个类(Resque Job),它具有在使用后一个类的id调用时影响另一个类的值的方法。
class ResqueKlass
def self.perform(id)
obj = EditKlass.find(id)
obj.update(value: 0)
end
end
我想使用rspec来测试这个值确实在方法
中发生了变化describe 'Something' do
let(:obj){FactoryGirl.create(:editklass)}
scenario 'Change obj value' do
ResqueKlass.perform(obj.id)
expect(obj.value).to eq(0)
end
end
此测试失败,它预期0它获得工厂女孩设置的值。
我也尝试过不使用工厂女孩用let创建'obj'但是仍然无效。我已经在ResqueKlass执行方法中放置了绑定,我可以看到该值正在更新。
PS请记住,我是Ruby和rspec的新手。这些不是我正在使用的确切类,其原因是实际的类包含一些敏感数据。
答案 0 :(得分:2)
会发生这种情况,因为您没有重新加载该记录,因此您的obj仍会显示旧版本。
尝试使用obj.reload
重新加载obj:
describe 'Something' do
let(:obj){FactoryGirl.create(:editklass)}
scenario 'Change obj value' do
ResqueKlass.perform(obj.id)
expect(obj.reload.value).to eq(0)
end
end