【问题标题】:NameError: uninitialized constant, with RSpecNameError:未初始化的常量,带有 RSpec
【发布时间】:2012-03-16 11:14:49
【问题描述】:

我正在尝试使用 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 中定义的。我要做的只是模拟这个文件,我不能在 EmailComputerListener 中添加require 'computerlistener',因为这样做可能会破坏插件。

谢谢。

【问题讨论】:

  • Det där lägger du av med, direkt!
  • Kan stolt meddela att du blivittilldelad en down vote av mig :)

标签: rspec rake jruby jenkins-plugins


【解决方案1】:

由于您删除了堆栈跟踪,我需要猜测错误来自您的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2023-04-02
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多