Ruby on rails 测试ActiveRecord:使用RSpec的观察者

Ruby on rails 测试ActiveRecord:使用RSpec的观察者,ruby-on-rails,activerecord,rspec,observer-pattern,Ruby On Rails,Activerecord,Rspec,Observer Pattern,我有一个模型类,如下所示: class DataInfo < ActiveRecord::Base STATUS = {:UNAPPROVED => 1, :APPROVED => 2, :PROCESSED => 3 } attr_accessible :id, :owner, :status validates :status, :inclusion => {:in => STATUS.values} end class Status

我有一个模型类,如下所示:

class DataInfo < ActiveRecord::Base
  STATUS = {:UNAPPROVED => 1, :APPROVED => 2, :PROCESSED => 3 }
  attr_accessible :id, :owner, :status
  validates :status, :inclusion => {:in => STATUS.values}    
end
class StatusObserver < ActiveRecord::Observer
  def after_save(datainfo)
    if datainfo.status.eql? "APPROVED"
      DataInfoWorker.perform_async datainfo.id
    end 
  end
end
classdatainfo1,:已批准=>2,:已处理=>3}
可访问属性:id、:所有者、:状态
验证:status,:inclusion=>{:in=>status.values}
结束
我写了一封观察员信如下:

class DataInfo < ActiveRecord::Base
  STATUS = {:UNAPPROVED => 1, :APPROVED => 2, :PROCESSED => 3 }
  attr_accessible :id, :owner, :status
  validates :status, :inclusion => {:in => STATUS.values}    
end
class StatusObserver < ActiveRecord::Observer
  def after_save(datainfo)
    if datainfo.status.eql? "APPROVED"
      DataInfoWorker.perform_async datainfo.id
    end 
  end
end
class StatusObserver

如何使用RSpec测试观察者?我是否必须使用“无窥视Toms”插件?我主要想在你保存一部分后再做测试

您应该能够使用rspec-3语法执行以下操作:

describe DataInfo do
  describe 'after save when status is APPROVED' do
    let(:data_info) { DataInfo.new(status: :APPROVED) }

    before do
      data_info.save!
    end

    it 'queues DataInfoWorker' do
      expect(DataInfoWorker.jobs.size).to eq 1
    end

  end
end
更新以测试Sidekiq作业是否已排队。确保将
rspec sidekiq
gem添加到您的
gem文件中