6

嘿,我有一个看起来像这样的测试

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 并且我可以运行它。有谁知道这可能是什么原因造成的?如果您想了解更多信息,请告诉我。

4

2 回答 2

8

这是由铁轨脚手架自动生成的固定装置引起的。无论出于何种原因,这都会出现在测试内部而不是它自己的部分中。当我修复固定装置时,此错误停止出现。

于 2013-10-16T23:03:58.653 回答
0

如果您收到 PostgreSQL 唯一键违规错误消息,可能您的主键索引不同步,例如在填充数据库之后。

用于ActiveRecord::Base.connection.reset_pk_sequence!('users') 使 User 表的主键索引再次同步。

于 2014-06-02T16:07:26.730 回答