我有以下设置:
class Simple
def self.test; end
end
task a_simple_job: :environment do
counter = 0
while counter < 2
Simple.test
counter += 1
end
end
require "rails_helper"
describe "a_simple_job" do
subject { Rake::Task[:a_simple_job].invoke }
before do
Rails.application.load_tasks
allow(Simple).to receive(:test)
subject
end
# It seems like rspec cannot spy on objects created in the context of rake tasks
it "calls test twice" do
expect(Simple).to receive(:test).once
end
end
字符串
为什么我得到:
(Simple(class)).test
预期:1次,带任何参数
已接收:0次,带任何参数
关于rake任务上下文和rspec,我是否遗漏了什么?
1条答案
按热度按时间w3nuxt5m1#
你应该使用
have_received
而不是receive
,这是因为你已经在Assert之前调用了你的任务(因此也调用了Simple.test
)。参考:https://rubydoc.info/github/rspec/rspec-mocks/RSpec%2FMocks%2FExampleMethods:have_received
我让它在我的机器上工作。
这是测试结果。
的数据