NameError: неинициализированная константа с RSpec - PullRequest
0 голосов
/ 16 марта 2012

Я пытаюсь протестировать мой плагин 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, чтобы тесты прошли успешно. Но было бы лучше проверить исходный файл, очевидно.

Редактировать: Тест не полагается на Jenkins :: Slaves :: ComputerListener, так же как и ComputerListener не определен в геме, с которым я связываю свой плагин. Все, что я пытаюсь сделать, это симулировать этот файл, я не могу добавить require 'computerlistener' в EmailComputerListener, так как это, вероятно, сломает плагин.

Спасибо.

1 Ответ

0 голосов
/ 16 марта 2012

так как вы удалили трассировку стека, мне нужно угадать, что ошибка исходит из строки 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.

...