使用pyscopg2作爲Django數據庫默認後端,並且測試非常簡單。它沒有試圖建立一個用戶,具有IntegrityError例外Django使用不正確的序列起始值創建Postgresql的測試數據庫
$ python manage.py test project.core.tests
nosetests --verbosity 1 project.core.tests --rednose
Creating test database for alias 'default'...
X.
-----------------------------------------------------------------------------
1) ERROR: Tests that a user with a sha1 hashed password is change to newer hash method
Traceback (most recent call last):
crowddeals/core/tests.py line 7 in setUp
self.user1 = User.objects.create_user('user1', '[email protected]')
env/lib/python2.7/site-packages/django/contrib/auth/models.py line 160 in create_user
user.save(using=self._db)
env/lib/python2.7/site-packages/django/db/models/base.py line 477 in save
force_update=force_update, update_fields=update_fields)
env/lib/python2.7/site-packages/django/db/models/base.py line 572 in save_base
result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
env/lib/python2.7/site-packages/django/db/models/manager.py line 203 in _insert
return insert_query(self.model, objs, fields, **kwargs)
env/lib/python2.7/site-packages/django/db/models/query.py line 1588 in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
env/lib/python2.7/site-packages/django/db/models/sql/compiler.py line 911 in execute_sql
cursor.execute(sql, params)
env/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py line 52 in execute
return self.cursor.execute(query, args)
IntegrityError: duplicate key value violates unique constraint "auth_user_pkey"
DETAIL: Key (id)=(1) already exists.
的默認數據庫是否正常工作,並可以添加用戶。測試僅在測試數據庫上失敗。
望着測試數據庫中,我看到了主鍵的所有表有錯誤的起始值自動遞增序列,它採取最後的那個值從默認數據庫上起始值測試數據庫。
對於默認數據庫,User.id使用自動遞增順序。
CREATE SEQUENCE auth_user_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
,並在測試數據庫中創建
CREATE SEQUENCE auth_user_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 2
CACHE 1;
這顯然是錯誤的,這也發生在其他表,如權限。
CREATE SEQUENCE auth_permission_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 191
CACHE 1;
我無法猜測爲什麼發生這種情況,就必須創建新的測試數據庫的序列從1
開始如果我更改數據庫引擎後端SQLITE3,異常唐」不會發生。這隻發生在postgresql中。
我該如何解決這個問題?所以我的測試可以再次開始工作。
在運行每個測試之前清除數據庫嗎? –
如果您的意思是測試數據庫,則在運行測試時不會創建。 –