首頁 > 後端開發 > Python教學 > 使用factory_boy時為Faker提供更好的自動完成功能

使用factory_boy時為Faker提供更好的自動完成功能

WBOY
發布: 2024-07-27 14:42:33
原創
805 人瀏覽過

Get better autocomplete for Faker when using factory_boy

在語言伺服器支援的自動完成無所不在之前,程式碼的編寫方式是否使自動完成變得容易並不重要。像 Sublime 這樣的流行文字編輯器無法充分理解程式碼以提供有意義的建議。程式設計師要么記住其依賴項的命令,要么參考文件。

2024 年,自動完成功能無所不在,但我們的軟體包並不一定能讓它的工作變得簡單。以 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),
    )
登入後複製

arrival屬性呼叫Faker的date_ Between_dates()方法。不幸的是,factory.Faker() 不會告訴您哪些 Faker 方法可用,也不會告訴您選擇 Faker 方法後接受哪些參數。此程式碼削弱了語言伺服器提供的優勢。

工廠中的自動補全 Faker

透過將 Faker 呼叫包裝在factory.LazyFunction() 中,您可以在將 Faker 與factory_boy 一起使用時獲得自動完成功能:

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),
    ))
登入後複製

傳遞給factory.LazyFunction()的函數在工廠建立實例時進行評估。我們將 faker 呼叫包裝在 lambda 中,以便可以為其提供參數。而您的語言伺服器可以向您顯示 fake.date_ Between_dates() 接受哪些參數。

當 faker 函數不需要任何參數時,設定就會減少。以下是如何將factory.LazyFunction()與Faker的first_name()和last_name()方法一起使用:

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)
登入後複製

產生的程式碼比使用factory.Faker()時要長一點,但是語言伺服器的幫助對我來說是值得的。沒有它,我可能需要不斷檢查文件。

如果輸入太多,您可以隨時將其別名為更短的內容:

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)
登入後複製

以上是使用factory_boy時為Faker提供更好的自動完成功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板