如何用Rspec测试ruby-on-rails中的rake任务,确保其不接受任何参数?

2026-04-10 07:031阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计376个文字,预计阅读时间需要2分钟。

如何用Rspec测试ruby-on-rails中的rake任务,确保其不接受任何参数?

根据Stephen Hagemann的这篇帖子,我正在尝试为我的Rake任务编写一个Rspec测试。Rake任务定义如下:LIB /任务/ retry.rake: namespace 'retry' do task :message, [:message_id] do |t, args| |t, args| TextMessage.new.resend!(args[:me]) end end

根据 this post by Stephen Hagemann,我正在尝试为我的一个rake任务编写一个Rspec测试.

LIB /任务/ retry.rake:

namespace :retry do task :message, [:message_id] => [:environment] do |t, args| TextMessage.new.resend!(args[:message_id]) end end

规格/任务/ 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]'

另一方面,当我运行没有参数的任务时:

如何用Rspec测试ruby-on-rails中的rake任务,确保其不接受任何参数?

Rake::Task["retry:message"].invoke

我能够调用rake任务,但测试失败,因为没有message_id.

我将参数传递给rake任务的方式有什么问题?

谢谢你的帮助.

在我看来,rake任务不应该做的事情,他们应该只调用事物.我从不为我的rake任务编写规范,只写他们调用的东西.

由于你的rake任务似乎是一个单行(因为rake任务应该是,IMO),我不会为它编写规范.如果它不止一行,我会将该代码移动到其他地方以使其成为单行.

但如果你坚持写一个规范,也许试试这个:Rake :: Task [“’retry:message [5]’”].invoke(添加单引号).

本文共计376个文字,预计阅读时间需要2分钟。

如何用Rspec测试ruby-on-rails中的rake任务,确保其不接受任何参数?

根据Stephen Hagemann的这篇帖子,我正在尝试为我的Rake任务编写一个Rspec测试。Rake任务定义如下:LIB /任务/ retry.rake: namespace 'retry' do task :message, [:message_id] do |t, args| |t, args| TextMessage.new.resend!(args[:me]) end end

根据 this post by Stephen Hagemann,我正在尝试为我的一个rake任务编写一个Rspec测试.

LIB /任务/ retry.rake:

namespace :retry do task :message, [:message_id] => [:environment] do |t, args| TextMessage.new.resend!(args[:message_id]) end end

规格/任务/ 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]'

另一方面,当我运行没有参数的任务时:

如何用Rspec测试ruby-on-rails中的rake任务,确保其不接受任何参数?

Rake::Task["retry:message"].invoke

我能够调用rake任务,但测试失败,因为没有message_id.

我将参数传递给rake任务的方式有什么问题?

谢谢你的帮助.

在我看来,rake任务不应该做的事情,他们应该只调用事物.我从不为我的rake任务编写规范,只写他们调用的东西.

由于你的rake任务似乎是一个单行(因为rake任务应该是,IMO),我不会为它编写规范.如果它不止一行,我会将该代码移动到其他地方以使其成为单行.

但如果你坚持写一个规范,也许试试这个:Rake :: Task [“’retry:message [5]’”].invoke(添加单引号).