2015-07-28 2 views
1

Я использую mock в своем проекте phoenix, чтобы проверить взаимодействие между контроллером и репо.mocking in phoenix framework

Я написал этот тест в моем контроллере:

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 

Можете ли вы мне помочь понять, где проблема? Как вы проверяете такое взаимодействие?

+0

Что такое^board_id? – emaillenin

ответ

1

Параметры, переданные в действие, представляют собой карту из строк в строки, так как нет возможности для фреймворка знать, какие параметры были предназначены для строк и чисел. Из-за этого вам нужно явно преобразовать ваши параметры в требуемый тип. Попытка:

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