Как утверждать в MiniTest, если метод отправлен объекту, который НЕ является ложным? - PullRequest
0 голосов
/ 11 октября 2018

Я понимаю, что мы можем проверить, отправляются ли методы объектам Mock, используя expect, но как насчет проверки, отправляются ли методы объектам, которые не являются Mocks, но являются фактическими объектами в вашем приложении?

Мотивация: Сэнди Метц в «выступлении» «Волшебные приемы тестирования» https://www.youtube.com/watch?v=URSWYvyc42M говорит, что для модульного тестирования исходящих вызовов командных методов (объясняется в ее выступлении) мы должны убедиться, что сообщение отправлено.Я пытаюсь это сделать, но единственное, что я нашел в MiniTest, это assert_send, у которого есть несколько проблем:

  1. Это устарело.
  2. Это не такпринять во внимание значение аргументов, отправленных получающему объекту.Если я запусту assert_send([object, :method_called, 'argument 1', 'argument 2']), утверждение вернет true, даже если object ожидал строки, отличные от 'argument 1' и 'argument 2'.

Я поищу в интернете лучшую часть2 дня на это.У кого-нибудь есть идеи?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Это на самом деле довольно просто без каких-либо драгоценных камней!Скажем, у вас есть служба NotificationService (обратите внимание, что это не фиктивный пример), и вы хотите утверждать, что метод вызывается для этой службы.Вы можете написать тест, который выглядит следующим образом:

def test_notification_is_sent_when_publishing
  notification_service_spy = Spy.on(NotificationService, :notify_subscribers)
  post = Post.new
  user = User.new
  blog = Blog.new(user)

  blog.publish!(post)
  NotificationService.expects(:notify_subscribers)
end
0 голосов
/ 11 октября 2018

Разобрался с ответом на мой собственный вопрос :)

Отправка этого сообщения на случай, если у кого-то возникнут проблемы, такие как я.

Используя камень Spy , вы можете утверждатьметод был вызван.

Из этого поста Илья Ефтимов - https://ieftimov.com/test-doubles-theory-minitest-rspec

class BlogTest < Minitest::Test
  def test_notification_is_sent_when_publishing
    notification_service_spy = Spy.on(NotificationService, :notify_subscribers)
    post = Post.new
    user = User.new
    blog = Blog.new(user)

    blog.publish!(post)

    assert notificaion_service_spy.has_been_called?
  end
end
...