web-dev-qa-db-ja.com

Factory_boyからFakerを使用する方法

_Factory_boy_はfake-factory (Faker)を使用してランダムな値を生成します。Fakerを直接使用してDjangoテストでランダムな値を生成します。

Factory_boy docsは、_factory.Faker_とそのプロバイダーの使用を推奨しています:

_class RandomUserFactory(factory.Factory):
    class Meta:
        model = models.User

    first_name = factory.Faker('first_name')
_

しかし、これは名前を生成していません:

_>>> import factory
>>> factory.Faker('name')
<factory.faker.Faker object at 0x7f1807bf5278>
>>> type(factory.Faker('name'))
<class 'factory.faker.Faker'>
_

_factory_boy_から_faker.py_クラスfactory.Faker('ean', length=10)faker.Faker.ean(length=10)を呼び出しますが、Faker docsは名前を表示する必要があると言っています:

_from faker import Faker
fake = Faker()
fake.name()
# 'Lucy Cechtelar'
_

Fakerから直接インスタンスを設定する代わりにFakerを使用する他の方法はありますか?

_from faker import Factory
fake = Factory.create()
fake.name()
_
20
marcanuy

私はこれが古い質問であることを知っていますが、これに遭遇する可能性のある人のために、あなたが使用できる別のアプローチがあります。

>>> from factory.faker import faker
>>> FAKE = faker.Faker()
>>> FAKE.name()
'Scott Rodriguez'
>>> FAKE.address()
'PSC 5061, Box 1673\nAPO AP 53007'
>>>
2
domino

次のように、factory_boyでfakerを使用できます。

class RandomUserFactory(factory.Factory):
    class Meta:
        model = models.User

    first_name = factory.Faker('first_name')

user = RandomUserFactory()

print user.first_name
# 'Emily

したがって、factory_boyでユーザーをインスタンス化する必要があり、Fakerが呼び出されます。

これをDjango=で使用するかどうかはわかりませんが、ファクトリで作成したユーザーをデータベースに保存する場合は、factory.Djangoを拡張する必要があります。 factory.FactoryではなくDjangoModelFactory。

13
rlaszlo