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文件中