使用 Rspec 测试 rake 任务不接受参数
testing rake tasks with Rspec is not accepting arguments
根据 this post by Stephen Hagemann.
,我正在尝试为我的一项抽取任务编写 Rspec 测试
lib/tasks/retry.rake
:
namespace :retry do
task :message, [:message_id] => [:environment] do |t, args|
TextMessage.new.resend!(args[:message_id])
end
end
spec/tasks/retry_spec.rb
:
require 'rails_helper'
require 'rake'
describe 'retry namespace rake task' do
describe 'retry:message' do
before do
load File.expand_path("../../../lib/tasks/retry.rake", __FILE__)
Rake::Task.define_task(:environment)
end
it 'should call the resend action on the message with the specified message_id' do
message_id = "5"
expect_any_instance_of(TextMessage).to receive(:resend!).with message_id
Rake::Task["retry:message[#{message_id}]"].invoke
end
end
end
但是,当我 运行 这个测试时,我收到以下错误:
Don't know how to build task 'retry:message[5]'
另一方面,当我 运行 没有参数的任务为:
Rake::Task["retry:message"].invoke
我能够调用 rake 任务,但测试失败,因为没有 message_id
。
我将参数传递给 rake 任务的方式有什么问题?
感谢大家的帮助。
在我看来,rake 任务不应该做 事情,它们应该只调用 事情。我从不为我的 rake 任务写规范,只写他们调用的东西。
由于您的 rake 任务似乎是单行的(IMO,rake 任务应该是这样),我不会为其编写规范。如果它不止一行,我会将该代码移到其他地方以使其成为一行。
但如果你坚持要写规范,也许试试这个:Rake::Task["'retry:message[5]'"].invoke
(添加单引号)。
因此,根据this and this,以下是一些带参数调用 rake 任务的方法:
Rake.application.invoke_task("my_task[arguments]")
或
Rake::Task["my_task"].invoke(arguments)
另一方面,我将任务称为:
Rake::Task["my_task[arguments]"].invoke
这是上面两种方法的错误组合。
非常感谢 Jason 的贡献和建议 thank you
。
根据 this post by Stephen Hagemann.
,我正在尝试为我的一项抽取任务编写 Rspec 测试lib/tasks/retry.rake
:
namespace :retry do
task :message, [:message_id] => [:environment] do |t, args|
TextMessage.new.resend!(args[:message_id])
end
end
spec/tasks/retry_spec.rb
:
require 'rails_helper'
require 'rake'
describe 'retry namespace rake task' do
describe 'retry:message' do
before do
load File.expand_path("../../../lib/tasks/retry.rake", __FILE__)
Rake::Task.define_task(:environment)
end
it 'should call the resend action on the message with the specified message_id' do
message_id = "5"
expect_any_instance_of(TextMessage).to receive(:resend!).with message_id
Rake::Task["retry:message[#{message_id}]"].invoke
end
end
end
但是,当我 运行 这个测试时,我收到以下错误:
Don't know how to build task 'retry:message[5]'
另一方面,当我 运行 没有参数的任务为:
Rake::Task["retry:message"].invoke
我能够调用 rake 任务,但测试失败,因为没有 message_id
。
我将参数传递给 rake 任务的方式有什么问题?
感谢大家的帮助。
在我看来,rake 任务不应该做 事情,它们应该只调用 事情。我从不为我的 rake 任务写规范,只写他们调用的东西。
由于您的 rake 任务似乎是单行的(IMO,rake 任务应该是这样),我不会为其编写规范。如果它不止一行,我会将该代码移到其他地方以使其成为一行。
但如果你坚持要写规范,也许试试这个:Rake::Task["'retry:message[5]'"].invoke
(添加单引号)。
因此,根据this and this,以下是一些带参数调用 rake 任务的方法:
Rake.application.invoke_task("my_task[arguments]")
或
Rake::Task["my_task"].invoke(arguments)
另一方面,我将任务称为:
Rake::Task["my_task[arguments]"].invoke
这是上面两种方法的错误组合。
非常感谢 Jason 的贡献和建议 thank you
。