在凤凰框架中嘲笑

时间:2015-07-28 14:35:20

标签: elixir phoenix-framework

我在我的凤凰项目中使用mock来测试控制器和回购之间的交互。

我在我的控制器中写了这个测试:

test_with_mock "list all entries on index", %{conn: conn}, Repo, [:passthrough], [] do
  conn = get conn, board_column_path(conn, :index, 1)

  assert called Repo.all from(c in Column, where: c.board_id == 1)
  assert html_response(conn, 200) =~ "Listing columns"
end

这是实际的代码:

def index(conn, %{"board_id" => board_id}) do
    columns = Repo.all from(c in Column, where: c.board_id == ^board_id)
    render(conn, "index.html", columns: columns)
end

输出如下:

1) test list all entries on index (SimpleBoard.ColumnControllerTest)
test/controllers/column_controller_test.exs:17
Expected truthy, got false
code: called(Repo.all(from(c in Column, where: c.board_id() == 1)))
stacktrace:
  test/controllers/column_controller_test.exs:20
你可以帮我理解问题所在吗?你如何测试这种互动?

1 个答案:

答案 0 :(得分:1)

传递给动作的参数是从字符串到字符串的映射,因为框架无法知道哪些参数是字符串和哪些数字。因此,您需要将params显式转换为您需要的类型。尝试:

board_id = String.to_integer(board_id)
columns = Repo.all from(c in Column, where: c.board_id == ^board_id)