Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Dapatkan autolengkap yang lebih baik untuk Faker apabila menggunakan factory_boy

Dapatkan autolengkap yang lebih baik untuk Faker apabila menggunakan factory_boy

WBOY
WBOYasal
2024-07-27 14:42:33782semak imbas

Get better autocomplete for Faker when using factory_boy

Sebelum autolengkap dikuasakan pelayan bahasa terdapat di mana-mana, tidak kira jika kod ditulis dengan cara yang memudahkan autolengkap. Editor teks popular seperti Sublime tidak cukup memahami kod untuk memberikan cadangan yang bermakna. Pengaturcara sama ada menghafal arahan kebergantungan mereka atau mereka merujuk dokumentasi.

Pada tahun 2024 autolengkap ada di mana-mana, tetapi pakej kami tidak semestinya memudahkan tugasnya. Ambil contoh ini daripada dokumentasi Factory Boy:

import factory
from datetime import datetime
from .models import User

class UserFactory(factory.Factory):
    class Meta:
        model = User

    arrival = factory.Faker(
        'date_between_dates',
        date_start=datetime.date(2020, 1, 1),
        date_end=datetime.date(2020, 5, 31),
    )

Atribut ketibaan memanggil kaedah date_between_dates() Faker. Malangnya, factory.Faker() tidak memberitahu anda kaedah Faker yang tersedia dan ia tidak akan memberitahu anda parameter yang diterima oleh kaedah Faker sebaik sahaja anda memilihnya. Kod ini mengurangkan faedah yang disediakan oleh pelayan bahasa.

Autolengkap Faker di kilang

Anda boleh mendapatkan autolengkap semasa menggunakan Faker dengan factory_boy dengan membungkus panggilan Faker di kilang.LazyFunction():

import factory
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(factory.Factory):
    class Meta:
        model = User

    arrival = factory.LazyFunction(lambda: fake.date_between_dates(
        date_start=datetime.date(2020, 1, 1),
        date_end=datetime.date(2020, 5, 31),
    ))

Fungsi dihantar ke kilang.LazyFunction() menilai apabila kilang mencipta tika. Kami membungkus panggilan palsu kami dalam lambda supaya kami boleh memberikannya hujah. Dan pelayan bahasa anda boleh menunjukkan kepada anda parameter yang fake.date_between_dates() terima.

Terdapat kurang persediaan apabila fungsi palsu tidak memerlukan sebarang hujah. Berikut ialah cara anda boleh menggunakan factory.LazyFunction() dengan kaedah first_name() dan last_name() Faker:

import factory
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(factory.Factory):
    class Meta:
        model = User

    first_name = factory.LazyFunction(fake.first_name)
    last_name = factory.LazyFunction(fake.last_name)

Kod yang terhasil adalah lebih lama sedikit berbanding jika kami menggunakan factory.Faker(), tetapi bantuan daripada pelayan bahasa amat berbaloi untuk saya. Tanpanya, saya mungkin perlu sentiasa menyemak dokumentasi.

Jika terlalu banyak untuk menaip, anda sentiasa boleh menyamakannya kepada sesuatu yang lebih pendek:

from factory import Factory, LazyFunction as LazyFn
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(Factory):
    class Meta:
        model = User

    first_name = LazyFn(fake.first_name)
    last_name = LazyFn(fake.last_name)

Atas ialah kandungan terperinci Dapatkan autolengkap yang lebih baik untuk Faker apabila menggunakan factory_boy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn