@Fly3110
web developer

Как правильно прописать проверку вызова функции в RSpec?

Всем привет.

Не совсем я, пока, видимо, понимаю принцип работы double.
В тесте мне надо проверить, что вызывается определенная функция класса. Но другая функция этого же класса, при этом, должна нормально отработать.

То есть, примерно так:

class Api
  def func1 # должна отработать
    ...
  end

  def func2 # надо проверить, что она вызывается
    ...
  end
end


если в тесте я пишу:
expect(Api).to receive(:new).and_return(double(func2: true))
, то тогда получаю ошибку, что вызывается неизвестная функция func1.

Если убираю .and_return(double(func2: true)), то, соответственно, func1 тоже не вызывается.

Как описать правильно?
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Fly3110 Автор вопроса
web developer
Решил проблему, но, как мне кажется, очень и очень топорно, наверное можно лучше.
Класс инициализируется три раза с тремя разными параметрами.
Получилось так:
api1        = Api.new('param1')
api2        = Api.new('param2')
api_default        = Api.new
allow(Api).to receive(:new).with(no_args).and_return(api_default)
allow(Api).to receive(:new).with('param1').and_return(api1)
allow(Api).to receive(:new).with('param2').and_return(api2)
expect(api_default).to receive(:func2).once


Напрягает то, что проверяю я только default инстанс, а описать пришлось все.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы