1

私が使用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

同じユーザーを2回保存していないようですが、受信していない例外をスローしたいのですが、ここで実行していない、または欠落しているのは何ですか?

4

1 に答える 1

3

user気付いたのですが、saeメールで新しいユーザーを作成するのではなく 、同じものを2回保存していました。

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()
于 2013-03-25T22:58:32.383 に答える