Нужна помощь в понимании тестирования в Ruby / Rails с использованием Minitest и Mocha - PullRequest
0 голосов
/ 17 января 2019

Мне было интересно, может ли кто-нибудь дать широкое объяснение (обзор высокого уровня) тестирования с использованием Minitest и Mocha в Rails и, возможно, когда использовать какие типы утилит тестирования.

Кажется, я застрял, не зная, когда использовать mock против stub, expects против stubs, а также порядок операций при издевательстве и окурке, и зная, как "сломать" функциональность кода.

Для примера (и да, я понимаю, что я тестирую побочные эффекты, но в этом случае я не знаю, что еще тестировать):

Класс для тестирования:

# frozen_string_literal: true

class UploadJob < ApplicationJob
  queue_as :upload

  def perform(batch_id)
    Logger.new.time('upload.time') do
      Uploader.new(batch_id).upload_data
    end
  end
end

Первоначальный тест, который не работал:

# frozen_string_literal: true

require 'test_helper'

class TestUploadJob < ActiveSupport::TestCase
  test 'UploadJob > perform > it should start uploading' do
    Logger.stubs(:new).then.stubs(:time).with('upload.time').yields
    Uploader.expects(:new).with(1).then.expects(:upload_data)

    UploadJob.perform_now(1)
  end

Конечный результат теста, который работает:

# frozen_string_literal: true

require 'test_helper'

class TestUploadJob < ActiveSupport::TestCase
  test 'UploadJob > perform > it should start uploading' do
    logger_stub = stub
    logger_stub.stubs(:time).with('upload.time').yields
    Logger.stubs(:new).returns(logger_stub)

    uploader_mock = mock
    uploader_mock.expects(:upload_data)
    Uploader.expects(:new).with(1).returns(uploader_mock)

    UploadJob.perform_now(1)
  end

Мне показалось, что в первом тесте было более декларативно говорить, что будет вызываться точный порядок вещей. Во втором тесте, который работает, сначала я заглушаю или высмеиваю вызов метода, который приходит после звонок на <CLASS>.new.

Как лучше думать об этом / подходить к проблеме тестирования? Есть ли какие-нибудь полезные ресурсы , специфичные для тестирования с помощью Minitest и Mocha, НЕ Rspec , которые бы предлагались для чтения?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...