2012-03-16 75 views
-1

我正在嘗試使用RSpec測試我的Jenkins Ruby插件。
我emailcomputerlistener.rb:NameError:未初始化的常量,使用RSpec

require 'net/smtp' 
class EmailComputerListener 
    include Jenkins::Slaves::ComputerListener 
    def online(computer, listener) 
    [...] 
    end 
end 

我emailcomputerlistener_spec.rb

require 'emailcomputerlistener' 
require 'computer' # overloaded class for computer 
require 'smtp'  # overloaded smtp class 
require 'computerlistener' # required? 

describe EmailComputerListener do 
    before :each do 
    @ecl = EmailComputerListener.new 
    [...] 
    end 
[tests] 
end 

當運行RSpec的,它說:

NameError: uninitialized constant EmailComputerListener::Jenkins 
[row 3] 

所有文件都在同一目錄中,我一直在在單獨的emailcomputerlistener上運行我的測試,並使用include聲明註釋掉,以使測試通過。但顯然測試原始文件會更好。

編輯:測試不依賴於Jenkins :: Slaves :: ComputerListener,也不應該是他們,ComputerListener是在我的捆綁插件的gem中定義的。我所要做的只是模擬這個文件,我不能在EmailComputerListener中添加require 'computerlistener',因爲這樣做可能會破壞插件。

謝謝。

+1

這是一個很好的方式! – JonatanEkstedt 2012-03-16 11:58:40

+0

Kan stolt meddela att du blivit tilldelad en down vote – JonatanEkstedt 2012-05-30 10:25:25

回答

0

因爲你刪除的堆棧跟蹤我需要猜測的錯誤是從3號線在EmailComputerListener未來:

include Jenkins::Slaves::ComputerListener 

我還得出結論,這是在您的computerlistener.rb文件,你在你的規範要求來定義。

有關於該設置的幾個壞的東西:

  • ,你應該用你的文件是否符合你的類:

EmailComputerListener =>email_computer_listener.rb

  • 你應該符合您的目錄結構與您的模塊:

Jenkins::Slaves::ComputerListener =>jenkins/slaves/computer_listener.rb

  • 如果您需要在使用它們或在根

所以require 'jenkins/slaves/computer_listener'應該在你的腳本的根文件的頂部文件。在你的情況下,以email_computer_listener.rb

相關問題