NameError:未初始化的常量,带RSpec

时间:2012-03-16 11:14:49

标签: rspec rake jruby jenkins-plugins

我正在尝试使用RSpec测试我的Jenkins Ruby插件 我的emailcomputerlistener.rb:

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,他们也不应该在我正在捆绑我的插件的gem中定义ComputerListener。我要做的就是模拟这个文件,我不能在EmailComputerListener中添加require 'computerlistener',因为这样做可能会破坏插件。

感谢。

1 个答案:

答案 0 :(得分:0)

因为您删除了堆栈跟踪,我需要猜测错误来自EmailComputerListener中的第3行:

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