【问题标题】:How to test a rake task with RSpec?如何使用 RSpec 测试 rake 任务?
【发布时间】:2014-09-06 05:45:55
【问题描述】:

我有一个使用资产管道的 Ruby 2.1/Rails 3.2 应用程序。我们还使用了一个脆弱的 (alpha) gem,它有时会导致“rake assets:precompile”失败。我想编写一个 rspec 测试,以确保在我们提交代码之前这个 rake 任务总是通过。

我在 spec/asset_precompile_spec.rb 中写了一个测试,看起来像这样:

require 'spec_helper'
require 'rake'

describe 'assets:precompile' do
  before { MyApp::Application.load_tasks }
  it { expect { Rake::Task['assets:precompile'].invoke }.not_to raise_exception }
end

然后我在命令行上运行它

rspec spec/lib/assets_precompile_spec.rb

我得到的输出是这样的:

  1) assets:precompile 
     Failure/Error: it { expect { Rake::Task['assets:precompile'].invoke }.not_to raise_exception }
       expected no Exception, got #<RuntimeError: Command failed with status (1): [/home/railsdev/.rvm/rubies/ruby-2.1.2/bin/...]> with backtrace:
         # ./spec/lib/assets_precompile_spec.rb:7:in `block (3 levels) in <top (required)>'
         # ./spec/lib/assets_precompile_spec.rb:7:in `block (2 levels) in <top (required)>'
     # ./spec/lib/assets_precompile_spec.rb:7:in `block (2 levels) in <top (required)>'

Finished in 0.71247 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/lib/assets_precompile_spec.rb:7 # assets:precompile 

我已经看得很远了,但我找不到任何运行“rake assets:precompile”的示例,它实际上可以在我的 RSpec 环境中运行。我尝试过明确加载 spec_helper.rb 文件,我尝试过明确要求“factory_girl”,但我找不到任何有效的东西。

有没有办法让测试运行这个 rake 任务在 RSpec 测试中运行?

【问题讨论】:

  • 我使用您提供的代码没有问题。
  • 我遇到了同样的问题,@spr 的解决方案对我有用。

标签: ruby-on-rails ruby-on-rails-3.2 rspec-rails rake-task ruby-2.1


【解决方案1】:

试试Rake::Task['assets:precompile:all'].invoke

而不是Rake::Task['assets:precompile'].invoke

就我而言,它有所帮助。

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2014-04-30
    • 2018-06-15
    相关资源
    最近更新 更多