2016-12-03 116 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

您可以嘗試重新創建數據庫的測試環境。然後重新檢查是否存在數據庫表「位置」列「完成」。 –

+0

如何重新創建數據庫? – Bitwise

+0

'MIX_ENV = test mix 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並且所有遷移都將重新運行。 (數據也會丟失,這對測試數據庫不應該是個問題)。

===

提示:你可以理解爲什麼遷移是通過看你的mix.exs文件中的aliases私有函數運行:

defp aliases do 
    [... 
    "test": ["ecto.create --quiet", "ecto.migrate", "test"]] 
    end 
相關問題