2012-12-13 85 views
2

我正在嘗試爲我編寫的gem編寫RSpec測試,但我無法通過測試來識別我編寫的模塊以及與這些模塊相關的方法。在RSpec中爲Gem編寫測試

這裏是我的spec_helper.rb:

require 'rspec' 

RSpec.configure do |config| 

end 

我的規格文件:

require 'spec_helper' 

describe MyCompany::SomeHelper do 
    describe '#self.get_token' do 
    token = MyCompany::SomeHelper.get_token 
    end 
end 

當我運行測試,我得到這個錯誤信息:未定義的方法`get_token中」的MyCompany的:: SomeHelper:Module(NoMethodError)。

但是,當我將它包含在另一個應用程序中時,它本身可以正常工作。我想我可能沒有正確配置RSpec中的任何東西,任何人都可以幫忙嗎?

回答

2

混淆可能是因爲Rails,因爲Rails加載所有內容,並且需要'spec_helper'是你需要做的唯一事情。

RSpec自動將lib目錄添加到您的加載路徑,因此您可以輕鬆地從規範中獲取您的代碼。

比方說,你有這樣的文件進行測試:lib/my_gem_name/my_class.rb,然後把這段代碼在你的規範上:

require 'my_gem_name/my_class' 

如果你不打算在你的spec_helper配置任何東西,你不需要創建它並需要它。事實上,如果您正在進行純粹的隔離測試,我會建議您不要這樣做。

1

您需要包含您的SomeHelper模塊定義的文件。您的spec_helper和spec文件都不會將其引入。這假定您正在將您的測試編寫在與您的寶石相同的項目中。

如果您已經打包了gem並且正在嘗試從另一個項目中對其進行測試,那麼需要在您的加載路徑中的某處放置gem。