【问题标题】:Test whether a class level method change attribute of another class测试一个类级别的方法是否改变另一个类的属性
【发布时间】:2015-12-11 16:47:19
【问题描述】:

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

我也尝试过不使用 factory girl create 'obj' 和 let 但这仍然不起作用。我在 ResqueKlass perform 方法中放置了绑定,我可以看到值正在更新。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      相关资源
      最近更新 更多