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

Test whether a class level method change attribute of another class

在 Ruby 应用程序中,我有一个 class(Resque Job),当使用后者的 ID 调用时,该方法会影响另一个 class 的值 class。

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 的地方失败了,它得到了在工厂女孩中设置的值。

我也试过不使用 factory girl create 'obj' 和 let ,但还是不行。我在 ResqueKlass 执行方法中放置了绑定,我可以看到该值正在更新。

PS 请记住,我是 Ruby 和 rspec 的新手。这些并不是我正在使用的确切 classes,原因是实际 classes 包含一些敏感数据。

会发生这种情况,因为您没有重新加载该记录,因此您的 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