簡體   English   中英

使用Rspec測試rake任務不接受參數

[英]testing rake tasks with Rspec is not accepting arguments

根據斯蒂芬·哈格曼(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任務的方式有什么問題?

感謝所有幫助。

在我看來,耙任務不應該的事情,他們應該只調用的東西。 我從不為耙任務寫規格,僅為它們調用的東西寫規格。

由於您的抽佣任務似乎是單線的(就像IMO的抽佣任務一樣),因此我不會為此編寫規格。 如果超過一行,我會將代碼移到其他地方以使其成為單行代碼。

但是,如果您堅持編寫規范,則可以嘗試以下操作: Rake::Task["'retry:message[5]'"].invoke (添加單引號)。

因此,根據這個這個 ,以下是調用帶參數的rake任務的一些方法:

Rake.application.invoke_task("my_task[arguments]")

要么

Rake::Task["my_task"].invoke(arguments)

另一方面,我將任務稱為:

Rake::Task["my_task[arguments]"].invoke

這是上述兩種方法的錯誤組合。

非常thank you Jason的貢獻和建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM