添加索引到电子邮件列的罪魁祸首单元测试失败

glo*_*ory 24 testing indexing unit-testing ruby-on-rails devise

我是设计和导轨的新手,我只是将设计与我的示例应用程序集成在一起.我注意到在创建用户模型之后,我的所有单元测试都失败了.我试着缩小它,发现即使生成的断言'真相' user_test.rb也失败了:

ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: \
    column email is not unique: INSERT INTO "users" (...
Run Code Online (Sandbox Code Playgroud)

有一次我评论出add_index......

# add_index :users, :email, :unique => true
Run Code Online (Sandbox Code Playgroud)

...并通过它重新运行rake db:test:load并重新运行测试ruby -I test test/unit/user_test.rb.

有没有人经历过这个?

小智 55

如果你刚刚生成了设计模型,那么也会生成一个或多或少的内容:

one: {}
# column: value
#
two: {}
#  column: value
Run Code Online (Sandbox Code Playgroud)

此夹具尝试使用相同(不存在)的电子邮件创建两个用户.替换为:

one:
  email: test1@test.com

two:
  email: test2@test.com
Run Code Online (Sandbox Code Playgroud)

它将修复此错误.


Ste*_*sen 1

故障必须发生在实际测试之前的测试设置中。您可能正在尝试通过固定装置或工厂来设置具有相同电子邮件地址的用户。

如果您使用固定装置,请确保为每个用户提供不同的电子邮件地址。如果您使用工厂,请使用序列为创建的每个用户生成唯一的电子邮件地址。