首页 > 解决方案 > 测试环境中的 Elixir (UndefinedFunctionError) 函数

问题描述

我在模块中有这段代码

alias Commerce.Cart.{Cart, CartMaster}

@spec call(Cart.t()) :: Cart.t()
def call(cart) do
  cart
  |> add_pets_adjustments()
  |> CartMaster.recalculate_credit()
end

当我运行测试时出现此错误

** (UndefinedFunctionError) function Commerce.Cart.CartMaster.recalculate_credit/1 is undefined (module Commerce.Cart.CartMaster is not available)

我检查了 CartMaster 模块,名称是正确的

defmodule Commerce.Cart.CartMaster do
  #  ...
  def recalculate_credit(cart) do
    cart
    |> remove_existing_credit_adjustment
    |> remove_applied_credit()
    |> apply_credit()
    |> add_credit_adjustment()
  end
end

我还将函数调用更改为

def call(cart) do
  cart
  |> add_pets_adjustments()
  |> Commerce.Cart.CartMaster.recalculate_credit()
end

并得到了同样的错误

我检查了“_build/test/lib/app/ebin”并找到了Elixir.Commerce.Cart.CartMaster.beam文件

调用该函数以检查调用函数中加载的模块

:app
|> :application.get_key(:modules)
|> elem(1)
|> Enum.filter(fn e -> String.contains?(to_string(e), "Commerce.Cart") end)
|> IO.inspect(label: :modules)

该模块显示在列表中

modules: [Commerce.Cart.Adjustment, Commerce.Cart.Cart, Commerce.Cart.CartMaster, ...]

在开发模式下运行应用程序并进行手动测试工作得很好,
我不知道它可能是什么。

标签: elixirphoenix-framework

解决方案


推荐阅读