2013-03-25 4 views
0

Я использую Flask и моя SQLAlchemy модель являетсяSQLAlchemy тест: добавление и тот же пользователь дважды не бросает исключение, когда уникальный = True

class User(UserMixin, db.Model): 
    __tablename__ = 'users' 
    # noinspection PyShadowingBuiltins 
    uuid = Column('uuid', GUID(), default=uuid.uuid4, primary_key=True, 
        unique=True) 
    email = Column('email', String, nullable=False, unique=True) # yes unique is True 

Я пишу тестовые данные и импорта, как

app = Flask(__name__) 
app.config['SECRET_KEY'] = dev.SECRET_KEY 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' 
db = SQLAlchemy(app) 

Мой тест выглядит как

class TestUser(TestCase): 
    def setUp(self): 
     db.create_all() 

    def test_add_existing_user(self): 
     user = User('test_add_existing_user', 'welcome') 
     db.session.add(user) 
     db.session.commit() 
     self.assertEquals(1, len(User.query.all())) 

     db.session.add(user) 
     db.session.commit() 
     self.assertEquals(2, len(User.query.all())) # just to verify if it saves the same user twice. 

    def tearDown(self): 
     db.drop_all() 
     db.session.remove() 

Когда я запускаю этот тест, я вижу

Failure 
Traceback (most recent call last): 
    File "<project path>/tests/test_user.py", line 28, in test_add_existing_user 
    self.assertEquals(2, len(User.query.all())) 
AssertionError: 2 != 1 

Кажется, что он не сохраняет одного и того же пользователя дважды, но я хочу, чтобы исключение было брошено, которое я не получаю, что я не делаю прямо здесь или отсутствует?

ответ

2

Только что реализовано, я сохранял то же самое user дважды, вместо того, чтобы создавать нового пользователя с электронной почтой.

SQLAlchemy сохранит того же пользователя столько раз, сколько захочет.

Doing следующие работы

def test_add_existing_user(self): 
     user = User('test_add_existing_user', 'welcome') 
     db.session.add(user) 
     db.session.commit() 
     self.assertEquals(1, len(User.query.all())) 

     db.session.add(User(user.email, 'welcome')) 
     db.session.commit() 

 Смежные вопросы

  • Нет связанных вопросов^_^