2014-10-07 5 views
0

나는 UserFactory을 만들려고 해요, 난이 오류가 ./manage.py test을 실행 :factory_boy의 UserFactory : 그런 테이블 : AUTH_USER

import factory 
import django.contrib.auth.models as auth_models 
from wacep.weatherroulette.models import (
    GameState, Puzzle 
) 


class UserFactory(factory.django.DjangoModelFactory): 
    class Meta: 
     model = auth_models.User 

    username = factory.Sequence(lambda n: "user_%d" % n) 


class PuzzleFactory(factory.django.DjangoModelFactory): 
    class Meta: 
     model = Puzzle 

    display_name = factory.Sequence(lambda n: 'Test Puzzle {0}'.format(n)) 
    description = factory.Sequence(lambda n: 'Description {0}'.format(n)) 


class GameStateFactory(factory.django.DjangoModelFactory): 
    class Meta: 
     model = GameState 

    user = UserFactory() 
    current_inventory = 300 
:

OperationalError: no such table: auth_user 

이 내 factories.py 파일의 모습입니다

누구에게 무슨 일이 일어나고 있는지 알고 있습니까?

답변

2

오 .. factory.Factory 대신 factory.django.DjangoModelFactory에서 상속받은 오류를 수정하는 것으로 보입니다.

2

실제로 django.contrib.auth이 (가) settings.INSTALLED_APPS의 일부가 아니기 때문에 오류가 발생합니다.

factory_boy이 (가) django.contrib.auth.models.User을 만들려고 시도하고 데이터베이스에서 관련 테이블을 찾지 못하는 경우 오류가 발생합니다.

이 테이블은 Django의 테스트 러너가 테스트를 시작할 때 자동으로 만들어 져야합니다. 사실 그것이 만들어지지 않았다는 것은 당신이 INSTALLED_APPSdjango.contrib.auth을 추가하지 않았다는 것을 의미합니다.

+1

내'settings.INSTALLED_APPS'에는'django.contrib.auth'가 있었지만 문제는 아닙니다. – nnyby

1

나는이 문제에 실제로 직면했다. 왜냐하면 나는 똑같은 문제가 있었기 때문에 약간의 연구 끝에 나는 그 문제가 무엇인지 알고 있다고 생각한다. 당신은 아마 짐작했듯이, 그것은이 라인과 관련이있다 :

user = UserFactory() 

당신이 실제로 여기서하고있는 것은 제대로 장고 ORM을 사용하지 않고 사용자 개체를 만들려고합니다. sidenote : 필자는 여기서 잘못된 점을 완전히 분석하지 못했습니다. 테스트 데이터베이스가 설정되기 전에 가져 오기 중에 User 객체를 만들거나 실제로 적절한 데이터베이스와 통신하지 않습니다. 결론은 최소한 객체를 생성하기 위해서는 약간의 장고 마술이 필요하다는 것입니다. 그리고 factory_boy는 그 마법을 제공합니다.

에이 줄을 변경 :

user = UserFactory.create() 

는 오류를 수정해야한다.

0

이것은 정말 늦은 대답이지만, 오늘이 문제로 고생하고 해결책을 공유하고 싶습니다.

django를 사용하여 개발 설정 settings.local은 Postgresql을 사용하지만 테스트 설정 settings.test은 sqlite3을 사용합니다. settings.test에서 테스트를 실행하면 no such table 오류가 발생합니다.

$ DJANGO_SETTINGS_MODULE=myproject.settings.test python manage.py test 
OperationalError: no such table: ... 

sqlite3 데이터베이스에는 개발을 위해 sqlite3을 사용한 적이 없기 때문에 sqlite3 데이터베이스에는 스키마가 없기 때문입니다. 의도 한대로 그래서 sqlite가

$ DJANGO_SETTINGS_MODULE=myproject.settings.test python manage.py migrate 
# ... migration running for sqlite3 ... 

마이그레이션을 완료하는 한 나는 migrate, 내가 sqlite3를 테스트 데이터베이스 테스트를 실행할 수 있습니다.