繁体   English   中英

测试rake任务时,为什么rspec仅被调用一次,却两次收到此方法?

[英]When testing a rake task, why does rspec receive this method twice when it is only called once?

我正在尝试测试rake任务,并得到一个非常奇怪的结果。

expected: 1 time with arguments:
received: 2 times with arguments:

有问题的代码仅调用该方法一次,而我无法确定多余的调用来自何处。

这是我第一次为rake任务编写测试,因此我可能忽略了一些显而易见的事情。 以下内容看起来是否合理?

#spec/lib/scheduled_tasks_spec.rb
require 'rails_helper'
require 'rake'
MyApp::Application.load_tasks
load File.join(Rails.root, 'lib', 'tasks', 'scheduled_tasks.rake')

RSpec.describe "scheduled rake tasks" do
  describe 'Initialization' do

    let!(:team)  { create :team }
    let!(:admin) { create :user, role: 'admin' }

    it 'should call the GeneratePdf job for each team' do

      expect(GenerateReportJob).to(
        receive(:perform_later).with(
          [admin], team
        ).once.and_call_original
      )
      Rake::Task['scheduled_tasks:generate_reports'].invoke
    end
  end
end

我正在测试的rake任务非常简单

namespace :scheduled_tasks do
  task generate_reports: :environment do
    admins = Admin.where(role: 'admin')
    # byebug
    Team.all.each do |team|
      GenerateReportJob.perform_later(admins, team) 
    end
  end
end

您在这里两次加载了任务定义。

MyApp::Application.load_tasks
load File.join(Rails.root, 'lib', 'tasks', 'scheduled_tasks.rake')

显然,这导致名称"scheduled_tasks:generate_reports"指向两个 [相同]代码块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM