#elixir #phoenix-framework
#elixir #phoenix-framework
Вопрос:
Я создал помощника для выполнения некоторых вычислений, прежде чем число будет представлено в представлении:
defmodule FourtyWeb.CalculationHelpers do
use Phoenix.HTML
def value_in_euro(amount_in_cents) when is_binary(amount_in_cents) do
cond do
# some code
end
end
end
Эта штука работает. Сейчас я пытаюсь это протестировать:
defmodule FourtyWeb.CalculationHelpersTest do
use FourtyWeb.ConnCase, async: true
import Phoenix.View
@amount_in_cents 1020
describe "it calculates the correct value in euro" do
test "with correct data" do
assert 10.20 == value_in_euro(@amount_in_cents)
end
end
end
Если я запускаю mix test, я получаю следующую ошибку и не могу понять, почему:
== Compilation error in file test/app_web/views/calculation_helpers_test.exs ==
** (CompileError) test/fourty_web/views/calculation_helpers_test.exs:11: undefined function value_in_euro/1
Кто-нибудь может уточнить?
Ответ №1:
Вы вызываете value_in_euro/1
свой тестовый файл, но эта функция не определена. Чтобы исправить это, вызовите его из модуля, в котором он определен, следующим образом:
assert 10.20 == FourtyWeb.CalculationHelpers.value_in_euro(@amount_in_cents)
или импортируйте модуль, чтобы вы могли ссылаться на все функции в FourtyWeb.CalculationHelpers
качестве локальных функций:
import FourtyWeb.CalculationHelpers
...
assert 10.20 == value_in_euro(@amount_in_cents) # now this works
(Кстати, не просматривая остальную часть вашего кода, не завершится ли этот тест ошибкой, поскольку @amount_in_cents
он не является двоичным?)
Комментарии:
1. Спасибо Zwippie — я многое вырезал, есть и другие функции с другими защитниками в зависимости от типа 🙂