Любой способ проверить, что метод начинает pry? - PullRequest
0 голосов
/ 07 июня 2018

Я создаю гем, который предоставляет гораздо более удобную и настраиваемую «консоль» для разработки ruby ​​gem, чем текущие опции (т. Е. «Комплектная консоль»).

Таким образом, один изНе самым важным аспектом всего гема является то, что он фактически открывает консольный сеанс, который я сейчас настроил в методе запуска:

class MyConsole 
  def start
    Pry.start(self)
  end
end

Я пытаюсь протестировать эту функциональность, но этотрудно, потому что их не много хороших ресурсов для этого.Это также очень раздражает, потому что каждый раз, когда я запускаю этот метод в rspec, открывается pry, и мне приходится выходить из него перед завершением остальных тестов.

У меня есть три основных вопроса:

  1. Как я могу запустить метод в rspec, который запускает pry без фактического запуска pry?
  2. Как конкретно проверить, что этот метод действительно запускает pry?
  3. Предполагается, что возможны 1 и 2Как я могу проверить, в каком контексте метод начинает pry в?(обратите внимание, как метод start вызывает Pry.start (self), это означает, что сеанс pry должен открываться в контексте экземпляра MyConsole.)

1 Ответ

0 голосов
/ 07 июня 2018

Лучший способ сделать это, вероятно, использовать RSpec шпион .

Ваш тест, вероятно, будет выглядеть примерно так:

describe MyConsole do
  describe '#start' do
    it 'calls Pry.start' do
      described_class.start
      expect(Pry).to have_received(:start).with('your_args_here')
    end
  end
end

Этодействительно хорошее объяснение параметров заглушки RSpec, IMO, где вы можете узнать больше: https://about.futurelearn.com/blog/stubs-mocks-spies-rspec

...