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