Phoenix / Elixir:如何使用Plug.Test.conn()在测试连接中设置操作?

时间:2016-07-29 10:03:00

标签: elixir phoenix-framework

我写了一个小插件,接受一个操作列表作为选项。当前调用的操作位于此列表中时,插件的行为将有所不同。

为了测试这个,我需要在单元测试中设置动作。这可能吗?我在文档中找不到任何内容。

这是插件文档中提供的简短示例。

defmodule MyPlugTest do
  use ExUnit.Case, async: true
  use Plug.Test

  @opts AppRouter.init([])

  test "returns hello world" do
    # Create a test connection
    conn = conn(:get, "/hello")

    # Invoke the plug
    conn = AppRouter.call(conn, @opts)

    # Assert the response and status
    assert conn.state == :sent
    assert conn.status == 200
    assert conn.resp_body == "world"
  end
end

1 个答案:

答案 0 :(得分:1)

我会考虑在控制器测试中对这些进行集成测试。由于conn.private存储是专为图书馆设计的,因此可随时更改。

如果您不担心凤凰城的变化,那么您可以这样做:

conn =
   conn(:get, "/hello")
   |> put_private(conn, :phoenix_action, :index)
   |> AppRouter.call(conn, [:index])