簡體   English   中英

在Rails環境下使用Rspec測試Rake任務

[英]Testing Rake task with Rspec with Rails environment

我正在嘗試測試rake任務,它在其中使用了活動記錄。

require 'spec_helper'
require 'rake'

load File.join(Rails.root, 'lib', 'tasks', 'survey.rake')

describe "survey rake tasks" do
  describe "survey:send_report" do
    it "should send a report" do
      Rake::Task['survey:send_report'].invoke
    end
  end
end

當我運行此規范rspec spec/lib/survey_spec.rb ,出現此錯誤“

RuntimeError:
   Don't know how to build task 'environment'

如何通過示例規范在內部加載:enviroment任務?

我認為您應該首先加載任務:

require 'rake'
MyRailsApp::Application.load_tasks

然后調用您的任務:

Rake::Task['survey:send_report'].invoke

我懷疑問題在於您的survey:send_report任務取決於:environment但是您尚未加載定義:environment任務的文件。 那會在某個地方,您的主Rakefile會加載它。

所以,我想如果你改變

load File.join(Rails.root, 'lib', 'tasks', 'survey.rake')

load File.join(Rails.root, 'Rakefile')

會的。

聽起來您的接聽任務可能需要加載Rails環境。 您可以通過將以下行添加到before(:all)掛鈎中來解決這個問題:

Rake::Task.define_task(:environment)

您的任務是否添加了:enviroment來完成? 在您的.rake文件中,您應該具有以下內容:

namespace :survey do
# ...

task :send_report => :enviroment do
# ... stuff
end

這是因為您需要加載整個環境才能執行此任務。 您可以檢查此鐵路廣播以獲取更多信息http://railscasts.com/episodes/66-custom-rake-tasks

暫無
暫無

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

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