2013-01-06 29 views
0

我在使用由RSpec的提供的讓利功能的問題:命名空間問題,而使用let()輔助函數

在應用/規格/ class_spec.rb:

require 'spec_helper' 
module App 
    describe Class do 
     let(:instance) {Class.new('param')} 

     describe "#method" do 
     it "does something" do 
      instance.method(...) 
      # clever test code 
     end 
     . 
     . 
     . 
end 

我一直在關注RSpec的書,並根據它的例子(通過了!)讓我可以訪問其他'describe Class'塊的變量實例。但我得到的錯誤:

Uninitialized constant App::instance 

我也試圖將此代碼添加到無濟於事:

before :all do 
    instance 
end 

我在做什麼錯?

+1

看起來很奇怪,你正在將你的describe塊包裝在一個模塊中。這是常見的做法嗎?我從來沒有見過它。 –

+0

我沒有足夠的經驗知道什麼是常見做法!代碼中提到的'Class'在'App'模塊中,所以我想我應該把我的測試代碼放在同一個模塊中。另外,我看過的參考書中的幾個例子也是這樣做的。 – gradi3nt

+0

我相當有信心在這裏列出的任何代碼中找不到該錯誤的來源。在'App'上的某處你有調用'const_get(:instance)'的代碼。 –

回答

0

而不是

module App 
    describe Class do 

只需使用:

describe App::Class 

,一切都應該罰款 提示:而不是let(:instance) {Class.new('param')}你可以寫let(:instance) {described_class.new('param')}。它更聰明。