Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 测试一个类级方法是否更改另一个类的属性_Ruby On Rails_Ruby_Rspec_Factory Bot - Fatal编程技术网

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

Ruby on rails 测试一个类级方法是否更改另一个类的属性,ruby-on-rails,ruby,rspec,factory-bot,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(:

在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在let中创建“obj”,但仍然不起作用。我已经在ResqueKlass perform方法中放置了绑定,并且可以看到该值正在更新


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

发生这种情况,因为您没有重新加载该记录,因此您的obj仍然显示旧版本

尝试使用
obj重新加载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