2016-12-03 4 views
3

첫 번째 피닉스 테스트를 빌드하고 있습니다. 나는 단지 화면에 내용이 있다고 주장하려고하고있다. 공장에 ex_machina을 사용하고 있는데, 그게 내 문제 일지 모르지만 확실하지 않습니까? 여기 내 코드가있다.테스트를 실행할 때 Phoenix 테스트 슈트에서 열을 찾을 수 없습니다.

테이블 :

create table(:locations) do 
    add :start, :string 
    add :finish, :string 
end 

시험 :

컨트롤러 :

def show(conn, %{"id" => locations_id}) do 
    locations = Repo.get!(Locations, locations_id) 

    render conn, "show.html", locations: locations 
end 

에러 :

** (Postgrex.Error) ERROR (undefined_column): column "finish" of relation "locations" does not exist 
stacktrace: 
    (ecto) lib/ecto/adapters/sql.ex:463: Ecto.Adapters.SQL.struct/6 
    (ecto) lib/ecto/repo/schema.ex:397: Ecto.Repo.Schema.apply/4 
    (ecto) lib/ecto/repo/schema.ex:193: anonymous fn/11 in Ecto.Repo.Schema.do_insert/4 
    (ecto) lib/ecto/repo/schema.ex:124: Ecto.Repo.Schema.insert!/4 
    test/controllers/locations_controller_test.exs:8: (test) 
+0

당신은 테스트 환경에 대한 데이터베이스를 다시 시도 할 수 있습니다 :

===

팁 : 마이그레이션이 aliases 민간 기능에 mix.exs 파일을보고 실행되는 이유를 이해할 수있다. 그런 다음 데이터베이스 테이블'locations' 열'finish'가 있는지 다시 확인하십시오. –

+0

데이터베이스를 어떻게 다시 만듭니 까? – Bitwise

+0

'MIX_ENV = 테스트 믹스 ecto.drop' 또는'psql -U postgres -c "DROP DATABASE awesome_lunch_test;"'. 두 번째 접근법에서는 다른 데이터베이스 사용자 이름과 데이터베이스 이름을 가질 수 있습니다 (테스트 구성은'config/test.exs'에 저장됩니다). 그런 다음 테스트를 실행하십시오. 데이터베이스는 테스트가 실행되기 전에 생성됩니다. –

답변

5

mix test을 실행하면 마이그레이션이 실행됩니다.

  1. 당신은 mix ecto.gen.migration로 마이그레이션 파일을 만든 : 여기

    무슨 일이 있었는지 가능하다.

  2. mix test을 실행했습니다. 이 시점에서 새로 생성 된 것을 포함하여 모든 마이그레이션이 실행되었습니다. 이 새로운 마이그레이션은 테스트 데이터베이스의 schema_migrations 테이블에서 실행되도록 설정되었습니다.
  3. 테이블을 추가하기위한 지시 사항으로 이주를 편집했습니다.
  4. mix test을 다시 실행했습니다.이 시점에서 새로운 것이 이미 실행으로 설정되었으므로 믹스가 실행되지 않았습니다. 새 열이 추가되지 않았습니다.

이 경우라면 MIX_ENV=test mix ecto.reset을 실행하면 모든 이전이 다시 실행됩니다. (데이터도 손실되므로 테스트 DB에서 문제가되지 않아야 함).

defp aliases do 
    [... 
    "test": ["ecto.create --quiet", "ecto.migrate", "test"]] 
    end 
관련 문제