Как проверить опрос внешнего API с помощью Minitest? - PullRequest
0 голосов
/ 24 мая 2018

Я пытался смоделировать и заглушить и BaseApi.authenticate, и BaseApi::TrackableJob (которые являются запросами API), но не смог.

module BaseApis
  class PollTrackableJobWorker
    include Sidekiq::Worker

    ...

    def perform(job_id, _invoice_id)
      BaseApi.authenticate(1) do
        response = BaseApi::TrackableJob.find(job_id).first

        case response['status']
        when 'done' then true
        when 'error' then Bugsnag.notify(response['errors'])
        when 'pending' || 'running' then raise EDocumentNotSentError
        end
      end
    end
  end
end

Примечания:

  1. Код, связанный с повторной попыткоймеханизм отсутствует.
  2. Мы используем Мокко драгоценный камень .

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 25 мая 2018

Оказывается, я был слишком обдумал это, и yields метод был решением:

test 'status is done' do
  response = {
    'type'       => 'trackable_jobs',
    'id'         => '0b6ffad9177aeb594ad54af0',
    'status'     => 'done',
    'errors'     => nil
  }

  BaseApi.expects(:authenticate).with(1).yields
  BaseApi::TrackableJob.stubs(:find).returns([response])

  assert_equal(true, BaseApis::PollTrackableJobWorker.new.perform('xxx', 123))
end
...