我有一个(简化的)模块:(/app/jobs/checkpulse.rb)
module CheckPulse
@queue = :heartbeat
def self.perform()
Machine.all.each do |machine|
machine.update_columns(active_alarm: true) #do not want to touch updated_at
end
end
end
我可以在 rails 控制台中使用它,它会按预期更改所有机器。
我正在尝试编写一个规范来测试它:(/spec/jobs/checkpulse_spec.rb)
require "spec_helper"
require_relative '../../app/jobs/checkpulse'
describe "CheckPulse" do
let(:user) { FactoryGirl.create(:user) }
let!(:machine) { FactoryGirl.create(:machine, user: user, heartbeat_timeout: 5) }
it "should change the machine to alarm mode" do
CheckPulse.perform
expect(machine.active_alarm).to be_true
end
end
这个测试每次都失败。我在 CheckPulse 模块中使用了 puts 来检查它,它在模块内部具有预期的行为,但是当它从模块返回时,机器没有改变。
我曾尝试将模块混合到一个虚拟类中,但这也不起作用。我还尝试在测试环境中运行 rails 控制台,看看是否是环境问题,但该模块在那里也可以正常工作。
我花了一整天的时间,请帮忙!