-1

我正在尝试使用 RSpec 测试我的 Jenkins Ruby 插件。
我的电子邮件computerlistener.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]

所有文件都在同一个目录中,我一直在单独的电子邮件计算机侦听器上运行我的测试,并注释掉包含语句以使测试通过。但显然测试原始文件会更好。

编辑:测试不依赖于 Jenkins::Slaves::ComputerListener,它们也不应该,ComputerListener 是在我捆绑插件的 gem 中定义的。我要做的只是模拟这个文件,我不能require 'computerlistener'在 EmailComputerListener 中添加一个,因为这样做可能会破坏插件。

谢谢。

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 回答