- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Elixir 和 Phoenix 的新手,我正在尝试创建一个网络服务来补充我的网站。首先,我只想通过从 json 文件导入一些数据来测试我的新数据结构。我想我会通过测试来做到这一点。我已经通读了基本指南(包括测试部分),但我无法找到有关测试 api 调用的任何内容。
根据下面的代码,当我运行 mix test
时出现以下错误:
** (ArgumentError) flash not fetched, call fetch_flash/2
这在进行调用并返回连接的线路上失败。我假设我使用了错误的电话/遗漏了什么?是否有我遗漏的文档,或者有人可以指出一个很好的例子吗?
这是我的 router.ex
的片段:
scope "/", ContactsApp do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
resources "/contacts", ContactsController
end
# Other scopes may use custom stacks.
scope "/api", ContactsApp do
pipe_through :api
get "/import", ContactsController, :import
end
目前,我所做的只是复制 ContactsController.Create
方法并将其命名为 ContactsController.Import
。我还复制了“创建资源并在数据有效时重定向”测试并使用 :import
而不是 :create
这是完整的堆栈跟踪:
** (ArgumentError) flash not fetched, call fetch_flash/2
stacktrace:
(phoenix) lib/phoenix/controller.ex:997: Phoenix.Controller.get_flash/1
(phoenix) lib/phoenix/controller.ex:982: Phoenix.Controller.put_flash/3
(contacts_app) web/controllers/contacts_controller.ex:74: ContactsApp.LogController.stuff/2
(contacts_app) web/controllers/contacts_controller.ex:1: ContactsApp.LogController.action/2
(contacts_app) web/controllers/contacts_controller.ex:1: ContactsApp.LogController.phoenix_controller_pipeline/2
(contacts_app) lib/phoenix/router.ex:261: ContactsApp.Router.dispatch/2
(contacts_app) web/router.ex:1: ContactsApp.Router.do_call/2
(contacts_app) lib/contacts_app/endpoint.ex:1: ContactsApp.Endpoint.phoenix_pipeline/1
(contacts_app) lib/phoenix/endpoint/render_errors.ex:34: ContactsApp.Endpoint.call/2
(phoenix) lib/phoenix/test/conn_test.ex:194: Phoenix.ConnTest.dispatch/5
test/controllers/contacts_controller_test.exs:69
最佳答案
感谢@Dogbert 和@sobolevn,我才能够弄清楚我做错了什么。当代码由 mix phoenix.gen.html
生成时, Controller 可能有如下内容:
def create(conn, %{"contact" => contact_params}) do
changeset = Contact.changeset(%Contact{}, contact_params)
case Repo.insert(changeset) do
{:ok, _contact} ->
conn
|> put_flash(:info, "Contact created successfully.")
|> redirect(to: contact_path(conn, :index))
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
当代码由 mix phoenix.gen.json
生成时, Controller 包含的代码略有不同:
def create(conn, %{"fred" => fred_params}) do
changeset = Fred.changeset(%Fred{}, fred_params)
case Repo.insert(changeset) do
{:ok, fred} ->
conn
|> put_status(:created)
|> put_resp_header("location", fred_path(conn, :show, fred))
|> render("show.json", fred: fred)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(ContactsApp.ChangesetView, "error.json", changeset: changeset)
end
end
在我复制和粘贴的代码中,有一个对 put_flash
的调用,正如@Dogbert 所建议的(这意味着与 :browser
管道一起工作)。使用 mix phoenix.gen.json
生成的代码可以解决问题。
关于使用 Elixir/Phoenix 测试 api 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809295/
我正在尝试从模板中的列表( )中提取值,但出现此错误: lists in Phoenix.HTML and templates may only contain integers represent
我正在阅读 Programming Phoenix 这本书,一切都很好,直到第 44 页要求我重新启动 Phoenix 服务器。 我用双 Ctrl + C 杀死了当前服务器,但是当我尝试再次运行 mi
我的应用程序和 api json 请求以及常规 html 都可以工作。我的路由器.ex defmodule MyApp.Router do use MyApp.Web, :router pip
我想在模板中将对象呈现为 JSON。我试过: 但是我得到一个错误 protocol Phoenix.HTML.Safe not implemented for %Ecto.Changeset{...
在 phoenix 框架的 View 中,在 div 元素内生成两个 span 元素的方法是什么? 最佳答案 为了做到这一点,可以只使用一个数组并将其作为 div 标签的值传递给内部,如下所示: de
我从 Rails 迁移,并希望这能在我的模板中工作? hello world 似乎没有一个条件得到呈现。如何实现这一目标? 谢
完成示例指南。本章中详细介绍的内容在我的应用程序中不起作用。看起来很简单的事情。我有一个视频模型: defmodule Rumbl.Video do use Rumbl.Web, :model
完成示例指南。本章中详细介绍的内容在我的应用程序中不起作用。看起来很简单的事情。我有一个视频模型: defmodule Rumbl.Video do use Rumbl.Web, :model
通过可选“inputs_for”输入的 Phoenix 嵌套表单导致 Controller 中的 map 无法通过验证。例如,一个帖子有评论。如果我想在创建帖子时为帖子添加评论,嵌套表单将如下所示:
我正在尝试在应用程序中实现不同的语言。所以我所做的是在 Session 的 db 中创建了 lang 变量,它保留了当前选择的语言。 问题是我正在通过更新操作调用和更新值: def update(co
我想在我的网站上实现一个典型的“记住我”功能,它需要一种方法来创建在遥远的 future 过期的 cookie。有没有办法在 Phoenix Framework 中创建它们? 最佳答案 只要给 coo
我正在制作一个多站点应用程序。我想在测试 Controller 之前在连接上设置请求主机。在 Rails 中,我们可以使用 before :each do request.env["HTTP_RE
我知道我可以通过包含以下内容来更新实时取景: if connected?(socket), do: :timer.send_interval(10000, self(), :click) 但是,有没有
Ruby on Rails 带有终端命令 rake routes . Phoenix 有类似的吗? 最佳答案 命令是 $ mix phoenix.routes 关于phoenix-framework
我正在尝试使用 addict包以在我的项目中进行身份验证,但是每当我尝试执行操作(注册、登录...)时,我的 POST 都会出现 CrossDomain 错误。 我已经尝试添加 cors_plug包来
我在 Phoenix 项目,和mix ecto.create , mix ecto.migrate , 和 mix ecto.drop都发出相同的错误: $ mix ecto.drop ==> tzd
在我的帖子模型上,我实现了一个简单的验证 def changeset(model, params \\ :empty) do model |> cast(params, @requ
这主要是为了测试目的,但是我怎样才能在 Heroku 上实现与 mix ecto.reset 相同的效果。这样的命令导致 FATAL: permission denied for database "
我们的 Web 应用程序目前在 C# 中运行在 Windows 和 IIS 上。我们严重依赖此环境中包含的 Windows 身份验证方案。启用 Windows 身份验证后,我们可以检测连接用户的身份,
在我的 Phoenix 应用程序中,我想对单个记录运行 get_by() Ecto 查询 - 但是,我要搜索的字段之一应该评估为 nil ,但 Phoenix/Ecto 禁止使用 nil 作为比较运算
我是一名优秀的程序员,十分优秀!