ruby Rspec返回预期1次收到0次

o3imoua4  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(123)

我的rspec测试用例正在返回

expected: 1 time with any arguments
received: 0 times with any arguments

字符串
这个错误,即使该方法被特定的活动记录调用。
下面是我的rspec:

context "when the City has updated" do 
   let!(:city) {create(:city, ...}
   let!(:user) {create(:user, city: city)
   let!(:user2) {create(:user, city: city)

   it "should call the process_scheudle_period for each of the user" do 
       expect(user).to receive(:create_new_period_for_mayor)
       expect(user2).to receive(:create_new_period_for_mayor)
       city.update_attribute(:mayor, "mr alford")
       Delayed::Worker.new.run Delayed::Job.find_by(process_identifier: "process_city_changes")
        end
end


正在延迟作业中调用市长的create_new_period_for_mayor。所以我也运行延迟的作业。

在city.rb中

保存后回调
self.delay(process_identifier:“process_city_changes”).process_city_data_changes

def process_city_data_changes
    users = self.users
      users.each do |user|
        user.create_new_period_for_mayor
      end
end


我已经使用了调试器,并且对于每个记录都调用了该方法,但是我的测试总是返回
任何参数都需要1次,已收到0次..
当我使用expect_any_instance_of(User)时,它会被传递。
但我需要对每个用户都有特别的期望。
而且我已经验证了调用create_new_period_for_mayor的用户是我所期望的同一个用户。
我哪里错了?任何帮助

sz81bmfz

sz81bmfz1#

在后台,当一个作业排队时,DJ会存储您正在使用的模型对象的主键和类。然后,当作业运行时,它使用这些参数创建对象的新示例。
...即作业运行时的对象与您将其入队的对象不是同一个示例...
所以是的,使用_any_instance_of

相关问题