功能在浏览器中工作,在控制器测试中“未定义或私有”

时间:2018-03-08 22:20:10

标签: elixir phoenix-framework

我目前正在尝试将我的主要Rails应用程序转换为Phoenix用于学习目的。

我有一个非常标准的Phoenix 1.3.0应用程序(在Elixir 1.5.2下运行),我正在尝试设置我的布局<body>元素的CSS类。我怎么做并不重要,所以让我们假设这个函数看起来像这样:

def body_class(conn) do
  "some-class"
end

当我将此函数放在lib/my_app_web/views/layout_view.ex文件中时,它会按预期工作(在浏览器中以及运行mix test时)。

然后我尝试将此函数提取到一个模块(称为PageTitle)中。但是,无论我在哪里使用import MyAppWeb.PageTitle引用此模块(我不知道在哪里正确放置相应的文件,所以我尝试lib/my_app_web/page_title.exlib/my_app_web/views/page_title.ex),在浏览器但不是在我运行mix test时。

我还尝试将import调用放入我应用的controller文件的viewmy_app_web.ex部分(以便通过Phoenix'{{1在控制器中的宏)但无济于事。

控制器测试总是失败:

use

我认为Phoenix在控制器测试中使用的** (UndefinedFunctionError) function MyAppWeb.PageTitle.body_class/1 is undefined or private函数的工作方式与在浏览器中请求页面的方式不同。

不幸的是,我还没有掌握凤凰,所以我找不到任何暗示我做错了什么。

(我已经更改了这个问题的文件和模块名称 - 我的真实应用程序命名不同 - 但是当在浏览器中运行时,一切都按预期工作,您可以假设文件文件名或拼写错误没有问题在其中。)

我感谢评论这是否是凤凰城集中设置身体课程的方式,但我的主要问题是:如何在测试和真实应用程序中完成这项工作(以及我做错了什么这不起作用)?

0 个答案:

没有答案