1

次のような単純なドキュメントを定義しました。

class Company(Document):
    screen_name = StringField(max_length=100, required=True, unique=True)
    official_name = StringField(required=False)

    meta = {
        'indexes': [{'fields': 'screen_name', 'unique': True}]
    }

しかし、私がテストを書いているとき

@use_tdb
def test_company3():
    """ test company2 """
    company = Company(screen_name='asdasd')
    company.save()
    company = Company(screen_name='asdasd')
    with nt.assert_raises(OperationError):
        company.save()
        pprint([(x.id, x.screen_name,) for x in Company.objects.all()])

それは実際にそれらの両方を保存します。そして、出力に次のように表示されます。

[(ObjectId('4f719f915c121a21ad000003'), u'asdasd'),
 (ObjectId('4f719f915c121a21ad000004'), u'asdasd')]

私が間違ったことをしたアイデアはありますか?

ありがとう

4

1 に答える 1

2

これは、drop_collection が必要な場合があります。

def test_company3():
    """ test company2 """
    Company.drop_collection()
    company = Company(screen_name='asdasd')
    company.save()
    company = Company(screen_name='asdasd')
    with nt.assert_raises(OperationError):
        company.save()
    pprint([(x.id, x.screen_name,) for x in Company.objects.all()])

このテストを参照してください。Mongoengine はすべてのテストに合格しています。 https://github.com/hmarr/mongoengine/blob/master/tests/document.py#L875

Mongoengine チーム 最近 0.6.3 をリリースしました。

于 2012-03-27T11:48:53.423 に答える