【发布时间】:2013-10-25 05:43:06
【问题描述】:
嘿,我有一个看起来像这样的测试
test 'create account' do
if User.create(email: 'me@test.com', password: 'blahblah')
assert true
else
assert User.msg
end
end
但是当我尝试运行它时,我收到如下错误消息:
1) Error:
UserTest#test_create_account:
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email"
DETAIL: Key (email)=() already exists.
: INSERT INTO "users" ("created_at", "updated_at", "id") VALUES ('2013-10-16 21:59:54', '2013-10-16 21:59:54', 298486374)
这在我看来好像我没有初始化电子邮件,但据我所知,这应该用我上面的创建来初始化。我正在使用强大的参数,所以我没有启用任何 attr_accessable 并且我可以运行它。有谁知道这可能是什么原因造成的?如果您想了解更多信息,请告诉我。
【问题讨论】:
-
您的电子邮件属性肯定有唯一的验证。这会引发错误,因为 me@test.com 已经由另一个用户创建和/或保存在您的数据库中。如果您更改电子邮件参数,您会收到相同的错误吗?如果你运行两次呢?
-
@JeremyS 感谢您的帮助!我尝试更改它,即使使用完全独特的东西,我也会得到相同的错误。如果您查看 SQL,它似乎只插入了 created_at、update_at 和 id
-
试试
email: "#{SecureRandom.uuid}@test.com" -
啊啊!我得到了它。当我生成脚手架时,Rails 自动添加了空白固定装置。无论出于何种原因,这在我的测试中都显示为错误。 (不应该单独显示吗?)非常感谢您的帮助。
-
这对以后有帮助,谢谢发帖!
标签: ruby-on-rails ruby unit-testing tdd