2016-10-01 47 views
3

我在我的Phoenix應用程序中創建了一個名爲ProgressController的控制器。這是我的路由器的文件是什麼樣子:未定義的[控制器]有兩個參數的路徑_path

defmodule MyTestApp.Router do 
    use MyTestApp.Web, :router 

    pipeline :api do 
    plug :accepts, ["json"] 
    end 

    scope "/", MyTestApp do 
    pipe_through :api 

    get "https://stackoverflow.com/users/:user_id/courses/:course_id", ProgressController, :show 
    end 
end 

當我運行mix phoenix.routes它輸出:

progress_path GET /users/:user_id/courses/:course_id MyTestApp.ProgressController :show 

和我有下面的測試,它使用progress_path

test "shows the user's progress in the given course", %{conn: conn} do 
    # prepare some stuff 
    conn = get conn, progress_path(conn, :show, %{user_id: 1, course_id: 7}) 
    # assert some stuff 
end 

progress_path是與mix phoenix.routes給了我相同的名字,我很驚訝在運行我的測試時看到這個錯誤消息:

編譯11個文件(.EX)

** (CompileError) test/controllers/progress_controller_test.exs:12: undefined function progress_path/3 
    (stdlib) lists.erl:1338: :lists.foreach/2 
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 
    (elixir) lib/code.ex:363: Code.require_file/2 
    (elixir) lib/kernel/parallel_require.ex:57: anonymous fn/2 in Kernel.ParallelRequire.spawn_requires/5 

20:34:46.402 [error] GenServer #PID<0.242.0> terminating 
** (CompileError) test/controllers/progress_controller_test.exs:12: undefined function progress_path/3 
    (stdlib) lists.erl:1338: :lists.foreach/2 
    (elixir) src/elixir_module.erl:113: :elixir_module.do_compile/5 
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 
    (elixir) src/elixir.erl:223: :elixir.erl_eval/3 
    (elixir) src/elixir.erl:211: :elixir.eval_forms/4 
    (elixir) src/elixir_compiler.erl:66: :elixir_compiler.eval_compilation/3 
    (elixir) src/elixir_lexical.erl:17: :elixir_lexical.run/3 
    (elixir) src/elixir_compiler.erl:30: :elixir_compiler.quoted/3 
    (elixir) lib/code.ex:363: Code.require_file/2 
    (elixir) lib/kernel/parallel_require.ex:57: anonymous fn/2 in Kernel.ParallelRequire.spawn_requires/5 

我縮小了問題的事實,有2個PARAMS在該路線的網址,但我無法弄清楚如何真正解決這個問題。我究竟做錯了什麼?

回答

4

經過大量的搜索,試驗和錯誤,我發現path函數需要一個參數列表,而不是Map。像這樣:

conn = get conn, progress_path(conn, :show, 1, 7) 
相關問題