Фон
У меня есть библиотека, которая использует 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?