我目前正在尝试将我的主要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.ex
和lib/my_app_web/views/page_title.ex
),在浏览器但不是在我运行mix test
时。
我还尝试将import
调用放入我应用的controller
文件的view
和my_app_web.ex
部分(以便通过Phoenix'{{1在控制器中的宏)但无济于事。
控制器测试总是失败:
use
我认为Phoenix在控制器测试中使用的** (UndefinedFunctionError) function MyAppWeb.PageTitle.body_class/1 is undefined or private
函数的工作方式与在浏览器中请求页面的方式不同。
不幸的是,我还没有掌握凤凰,所以我找不到任何暗示我做错了什么。
(我已经更改了这个问题的文件和模块名称 - 我的真实应用程序命名不同 - 但是当在浏览器中运行时,一切都按预期工作,您可以假设文件文件名或拼写错误没有问题在其中。)
我感谢评论这是否是凤凰城集中设置身体课程的方式,但我的主要问题是:如何在测试和真实应用程序中完成这项工作(以及我做错了什么这不起作用)?