And*_*vey 2 rspec ruby-on-rails
我正在尝试测试 rake 任务,并得到一个非常奇怪的结果。
expected: 1 time with arguments:
received: 2 times with arguments:
Run Code Online (Sandbox Code Playgroud)
有问题的代码只调用该方法一次,我无法弄清楚额外的调用来自哪里。
这是我第一次为 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
Run Code Online (Sandbox Code Playgroud)
我正在测试的 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
Run Code Online (Sandbox Code Playgroud)
您在此处加载任务定义两次。
MyApp::Application.load_tasks
load File.join(Rails.root, 'lib', 'tasks', 'scheduled_tasks.rake')
Run Code Online (Sandbox Code Playgroud)
显然,这会导致名称"scheduled_tasks:generate_reports"指向两个[相同]的代码块。
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |