-1

Jenkins Ruby プラグインを RSpec でテストしようとしています。
私のemailcomputerlistener.rb:

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

私のメールcomputerlistener_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]

すべてのファイルは同じディレクトリにあります。テストに合格するために include ステートメントをコメントアウトして、別の emailcomputerlistener でテストを実行しています。ただし、明らかに元のファイルをテストする方がよいでしょう。

編集: テストは Jenkins::Slaves::ComputerListener に依存していません。ComputerListener は、プラグインをバンドルしている gem で定義されています。私がやろうとしているのは、このファイルをシミュレートすることだけですrequire 'computerlistener'.EmailComputerListenerにaを追加すると、プラグインが壊れる可能性があるため、追加できません.

ありがとう。

4

1 に答える 1

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

于 2012-03-16T14:44:34.160 に答える