我正在尝试使用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'
,因为这样做可能会破坏插件。
感谢。
答案 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
。