2011-04-24 47 views
24

我是設計和rails的新手,我只是集成設計與我的示例應用程序。我注意到在創建用戶模型後,我的所有單元測試都失敗了。我去嘗試縮小這個發現甚至產生斷言「真理」一個user_test.rb也失敗:將索引添加到電子郵件列的元兇單元測試失敗

ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: \ 
    column email is not unique: INSERT INTO "users" (... 

一旦我註釋掉add_index ...

# add_index :users, :email, :unique => true 

...並重新運行rake db:test:load並重新運行它通過的ruby -I test test/unit/user_test.rb的測試。

有沒有其他人會遇到這種情況?

回答

1

在實際測試之前,測試設置中必須發生故障。您可能試圖通過固定設備或工廠設置具有相同電子郵件地址的用戶。

如果您使用的是燈具,請確保爲每個用戶分配了不同的電子郵件地址。如果您正在使用工廠,請使用序列爲已創建的每個用戶生成唯一的電子郵件地址。

+0

嗨史蒂夫,這不是重複燈具數據的情況。我正在使用工廠(通過電子郵件進行排序),但對於爲Devise生成的特定模型用戶,我只測試'assert the truth'測試用例,它應該始終返回true。沒有夾具數據或任何東西。我清理了我的數據庫,確保更新了使用rake db的schema.rb:遷移並刪除測試數據庫並從頭開始重做測試。我懷疑添加索引和單元測試存在一些錯誤,但我沒有挖掘出那個兔子洞。 – glory 2011-04-24 18:37:39

+1

sql生成似乎是(插入語句中的值)不正確:ActiveRecord :: RecordNotUnique:SQLite3 :: ConstraintException:列電子郵件不是唯一的:INSE RT INTO「users」(「created_at」,「updated_at」,「id 「)VALUES('2011-04-24 08:53:36','2011-04-24 08:53:36',298486374) – glory 2011-04-24 19:04:57

55

如果你剛剛生成的色器件模型,也有或多或少的這個內容產生的夾具:

one: {} 
# column: value 
# 
two: {} 
# column: value 

此夾具嘗試創建兩個用戶,使用相同的(inexistant)的電子郵件。將其替換爲:

one: 
    email: [email protected] 

two: 
    email: [email protected] 

它會修復此錯誤。

+0

謝謝Geal,我跟蹤了一邊,但我注意到剛纔的問題。謝謝! – glory 2011-04-26 03:00:46

+0

我得到這個其他錯誤ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:沒有這樣的表爲我所有的測試。在刪除用戶夾具文件或禁用夾具之後:所有在測試助手中,我都能夠通過這些錯誤。我不知道爲什麼會發生這種情況。我會暫時過來的。 – glory 2011-04-26 03:37:11

+0

看起來像你沒有啓動數據庫遷移 – 2011-05-05 07:32:33