Python 如何让FactoryBoy创建临时目录?
我想让FactoryBoy为我创建一个Django模型实例,然后还创建一个临时目录 我试过几件事:Python 如何让FactoryBoy创建临时目录?,python,factory-boy,Python,Factory Boy,我想让FactoryBoy为我创建一个Django模型实例,然后还创建一个临时目录 我试过几件事: 类组织工厂(factory.DjangoModelFactory): 类元: 模型=组织 some_directory=tempfile.mkdtemp 及 some_directory=tempfile.mkdtemp() 及 @factory.lazy\u属性 def some_目录(self): 返回tempfile.mkdtemp() 当我尝试在测试中使用某个目录时,该值始终为“无”
类组织工厂(factory.DjangoModelFactory):
类元:
模型=组织
some_directory=tempfile.mkdtemp
及
some_directory=tempfile.mkdtemp()
及
@factory.lazy\u属性
def some_目录(self):
返回tempfile.mkdtemp()
当我尝试在测试中使用某个目录时,该值始终为“无”。为了了解发生了什么,最好深入了解factory boy的内部结构 工厂内件
工厂的生命周期中有不同的阶段:
宣言
当Python导入包含类工厂
声明的模块时,该类的定义被处理到工厂的源代码中的一个特殊元类。
元类读取所有定义的类属性和方法,分析它们,并以特定的方式存储它们
使用出厂设置
当您的代码使用MyFactory()
时,该类将根据以下步骤开始构建一个实例:
评估声明:要求每个LazyAttribute
,子工厂等生成其值李>
将结果参数传递给Meta.model
类构造函数-这提供了所述类的实例李>
要求所有生成后声明(RelatedFactory
和co)处理生成的对象-注意,从这些声明返回的任何值都会被丢弃
返回实例
解决你的问题
在您的情况下,我相信问题可能是某个目录
不是模型的\uuuu init\uuuuu
的有效kwarg,或者被模型类上的某些魔法所取代
最简单的方法是在后一代层面上工作:
类组织工厂(factory.django.DjangoModelFactory):
类元:
模型=组织
@工厂后一代
定义一些目录(组织、*args、**kwargs):
tmpdir=tempfile.mkdtemp()
#将生成的临时目录附加到生成的组织。
org.some_directory=tmpdir