Testing Rake task with Rspec with Rails environment

前端 未结 4 1673
闹比i
闹比i 2021-02-07 03:02

I\'m trying to test a rake task and it uses an active record in it.

require \'spec_helper\'
require \'rake\'

load File.join(Rails.root, \'lib\', \'tasks\', \'su         


        
相关标签:
4条回答
  • 2021-02-07 03:38

    Is your task adding the :enviroment to do it before? In your .rake file you should have something like this:

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

    This is because you need to load the full enviroment to do that task. You can check this railcast to get more information http://railscasts.com/episodes/66-custom-rake-tasks

    0 讨论(0)
  • 2021-02-07 03:47

    I suspect the problem is that your survey:send_report task depends on :environment but you haven't loaded the file that defines the :environment task. That'll be in rails somewhere, and your main Rakefile loads it.

    So, I think if you change

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

    to

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

    it'll work.

    0 讨论(0)
  • 2021-02-07 03:47

    Sounds like your take task may need the Rails environment to be loaded. You can stub this out by adding this line to your before(:all) hook:

    Rake::Task.define_task(:environment)
    
    0 讨论(0)
  • 2021-02-07 03:52

    I think you should first load the tasks:

    require 'rake'
    MyRailsApp::Application.load_tasks
    

    and then invoke your task:

    Rake::Task['survey:send_report'].invoke
    
    0 讨论(0)
提交回复
热议问题