2016-06-12 66 views
1

On Rails的4當我執行了一個裝飾我得到了以下錯誤RSpec的測試:Rspec的和德雷珀:在類名未初始化常量

/app/spec/decorators/my_decorator_spec.rb:3:in `<top (required)>': uninitialized constant MyDecorator (NameError) 

我肯定失去了一些東西,但我不知道是什麼。

我生成

rails g decorator My 

生成一個規格/ my_decorator_spec.rb文件裝飾,與內容:

require 'spec_helper' 

describe MyDecorator do 
end 

然後我測試

rspec spec/decorators/my_decorator_spec.rb 

我沒有在application.rb或spec_helper.rb中添加任何內容。 裝飾器本身能夠正常工作。

編輯

它比我想象的還要神奇。當我測試所有rspec文件時,我的裝飾器規範文件中的測試正確執行。

它的工作原理:

rspec spec/ 

它並不:

rspec spec/decorators 
rspec spec/decorators/my_decorator_spec.rb 

回答

1

這是由於裝飾規格在文件的頂部require 'spec_helper'而不是require 'rails_helper'產生。當您運行其他規格的裝飾規格(例如,控制器的規格,運行rspec spec/時,由於C談到d)之前,那麼他們最終會需要你的裝飾功能之前,正確的文件得到運行之前,所以一切都很好。

解決辦法是更換spec_helper與rails_helper需要你的裝飾規格:

perl -pi -e 's/spec_helper/rails_helper/' spec/decorators/* 

一旦你這樣做,你應該有運行rspec spec/decorators沒有問題。

N.B .: This change已經在draper repo中製作完成,但它是在gem 2.1.0版發佈後發佈的,這是gem最新的非預發佈版本。

相關問題