Как издеваться над HTTPoison с Mox? - PullRequest
0 голосов
/ 15 января 2019

Фон

У меня есть библиотека, которая использует HTTPoison для некоторых функций, которые мне нужно проверить. Чтобы добиться этого, я использую Mox , который, я считаю, является универсальной библиотекой для эликсира для эликсира (хотя есть и другие, у нее есть знак одобрения Хосе Валима)

Проблема

Все идет хорошо, я определяю свои макеты в test_helpers.exs:

    ExUnit.start()
    Mox.defmock(HTTPoisonMock, for: HTTPoison)

И я настроил свои фиктивные тесты:

defmodule Alfred.Test.Http.Test do
  use ExUnit.Case, async: true
  import Mox
  # Make sure mocks are verified when the test exits
  setup :verify_on_exit!

  describe "get" do
    test "works on OK" do
      HTTPoisonMock
      |> get(:get, fn _ -> 1 end)

      assert HTTPoisonMock.get(1) == 1
    end
  end
end

Проблема в том, что я не могу их запустить:

модуль HTTPoison не является поведением, пожалуйста, передайте поведение: для

фиктивные контракты, а не реализации

Теперь я знаю, что Хосе Валим поддерживает эту идеологию, поэтому у всего, что мы должны высмеивать, должен быть контракт. Но HTTPoison не мой, и у него его нет. Это подводит меня к следующему вопросу:

  • Как я могу издеваться над третьими библиотеками, которые не предлагают поведения с использованием Mox?

1 Ответ

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

HTTPoison использует поведение HTTPoison.Base, поэтому в данном конкретном случае все настроено.


Как я могу издеваться над третьими библиотеками, которые не предлагают поведения, используя Mox?

Обычно мы делаем это с помощью внедрения зависимостей. Всякий раз, когда вам нужен сторонний разработчик, вы просто передаете его в качестве параметра и передаете другой модуль / макет в тестовой среде.

...