测试类级别方法是否更改另一个类的属性

时间:2015-12-11 16:47:19

标签: ruby-on-rails ruby rspec factory-bot

在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的新手。这些不是我正在使用的确切类,其原因是实际的类包含一些敏感数据。

1 个答案:

答案 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