sqlalchemy 测试:添加相同用户两次时未抛出异常,即使 unique=True
我正在使用 Flask
,我的 SQLAlchemy
模型是
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
看起来它没有保存同一个用户两次,但我希望能抛出一个异常,而我没有收到这个异常,我这里做错了什么或者漏掉了什么呢?
1 个回答
4
我刚意识到,我把同一个用户
保存了两次,而不是用相同的邮箱创建一个新用户。
SQLAlchemy可以把同一个用户保存很多次,只要你想。
下面的做法可以解决这个问题:
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()