Помощники для просмотра тестов Phoenix / Elixir

#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 — я многое вырезал, есть и другие функции с другими защитниками в зависимости от типа 🙂