2012-02-04 58 views
1

我正在與Sinatra和RSpec合作。我有這樣的LIB/auth.rb如何使attr_accessor僅在測試環境中工作?

class Person 
    attr_accessor :password if ENV['RACK_ENV'] == 'test' 
    .... 

我想執行的時候,我使用RSpec測試這個代碼,但它不工作。這是我的規格文件:

describe Person 
    it 'should match the password' do 
     @james = Person.new(foo, 'bar') 
     @james.password.should == 'bar' 
    end 
end 

我不想@james.password是這種模式的外部訪問,但要能夠從Rspec的文件或在測試環境中訪問它。是否有任何代碼可以使attr_accessor僅在測試環境中工作?

回答

1

運行測試時,您是否確實設置了ENV['RACK_ENV']

嘗試增加

ENV['RACK_ENV'] = 'test' 

您的測試文件的開始。

+0

哇...這是工作。謝謝馬特。我不知道ENV ['RACK_ENV']是否爲零。 – 2012-02-10 00:37:33

0

我知道這是一個老問題,但不是試圖編輯您的代碼來爲測試工作,您可以使用instance_variable_get
所以,你的天賦應該是這樣的:

describe Person 
    it 'should match the password' do 
    @james = Person.new(foo, 'bar') 
    @james.instance_variable_get(:@password).should == 'bar' 
    end 
end 

,它不會要求你Person類中的任何改變!