如何使用RSpec测试rake任务?

时间:2014-07-15 21:10:41

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

我有一个使用资产管道的Ruby 2.1 / Rails 3.2应用程序。我们还使用了一个脆弱的(alpha)宝石,它可以导致资产:预编译"有时失败。我想写一个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 

我看起来远远不够我无法找到任何运行资产的例子:预编译&#34;这实际上适用于我的RSpec环境。我已经尝试显式加载spec_helper.rb文件,我已经尝试明确要求&#34; factory_girl&#34;,但我找不到任何有用的东西。

有没有办法在RSpec测试中运行此rake任务?

1 个答案:

答案 0 :(得分:2)

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

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

就我而言,它有所帮助。