Antes que o preenchimento automático baseado em servidor de linguagem fosse onipresente, não importava se o código fosse escrito de uma forma que tornasse o preenchimento automático fácil. Editores de texto populares como o Sublime não conseguiam entender o código o suficiente para fornecer sugestões significativas. Os programadores memorizaram os comandos de suas dependências ou referenciaram a documentação.
Em 2024, o preenchimento automático está em toda parte, mas nossos pacotes não necessariamente facilitaram seu trabalho. Veja este exemplo da documentação do 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), )
O atributo de chegada chama o método date_between_dates() do Faker. Infelizmente, factory.Faker() não informa quais métodos Faker estão disponíveis e não informa quais parâmetros um método Faker aceita quando você seleciona um. Este código atenua os benefícios que os servidores de idiomas oferecem.
Você pode obter o preenchimento automático ao usar o Faker com factory_boy encerrando uma chamada do Faker em factory.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), ))
Funções passadas para factory.LazyFunction() avaliam quando a fábrica cria uma instância. Envolvemos nossa chamada falsa em um lambda para que possamos fornecer argumentos. E seu servidor de idioma pode mostrar quais parâmetros fake.date_between_dates() aceita.
Há menos configuração quando a função faker não precisa de argumentos. Aqui está como você pode usar factory.LazyFunction() com os métodos first_name() e last_name() do 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)
O código resultante é um pouco mais longo do que seria se tivéssemos usado factory.Faker(), mas a ajuda do servidor de linguagem vale a pena para mim. Sem ele, talvez eu precise verificar constantemente a documentação.
Se for muito para digitar, você sempre pode usar um alias para algo mais curto:
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)
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3