问题标签 [factory-boy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
10684 浏览

python - 如何使用 Factory_Boy 创建管理员用户?

我是一个相对的 Django 初学者,刚刚开始为我的项目做一些测试。我想要做的是使用登录到 Django Admin 站点的 selenium 构建一个功能测试。

我首先遵循本教程http://www.tdd-django-tutorial.com/tutorial/1/并使用固定装置和转储数据使管理员帐户信息可用于测试应用程序(它创建一个新数据库)。这工作正常。

然后我想看看我是否可以使用factory-boy来更换固定装置。工厂男孩通过在 tests.py 文件中实例化必要的对象来工作,这对我来说似乎更干净。不知何故,我无法让它工作,而且 Factory_boy 文档也没有太大帮助......

这是我的tests.py

这无法登录,因为它没有创建有效的管理员帐户。我怎么能用 factory-boy 做到这一点?有可能还是我需要为此使用固定装置?

(在这篇文章中,有些人建议固定装置是必要的,但工厂男孩没有出现:如何在 django tests.py 中创建管理员用户。我还尝试了相同答案底部建议的解决方案:https://stackoverflow。 com/a/3495219/1539688。它对我不起作用......)

0 投票
3 回答
3819 浏览

django - 尽管 FACTORY_DJANGO_GET_OR_CREATE,为什么 FactoryBoy 从 SubFactory 创建一个新对象

我刚刚开始在 Django 中使用factory boy。它有一个设置FACTORY_DJANGO_GET_OR_CREATE,这意味着如果已经存在一个新对象,它就不会创建一个新对象。但是,当我用现有对象请求现有SubFactory对象时,尽管有此设置,它仍会创建一个未使用的对象。

例如,在一个全新的项目中,我尝试过:

现在:

然后最后的调用BFactory产生了一个新的 class 对象A,即使B名为 Beetle 的对象已经存在(并且没有重新创建)。为什么,以及如何停止创建这个新的 A 对象?

(我知道我可以通过调用来解决这个问题:

但在我的实际用例中,我有几个依赖项和层次结构级别,以这种方式提供额外的冗余参数很麻烦——而且我似乎无法获得正确的参数组合。)

谢谢!

0 投票
1 回答
1983 浏览

python - 将 factory_boy 与 SQLAlchemy 和类方法一起使用

我正在开发一个以 SQLAlchemy 作为 ORM 的 Pyramid 应用程序。我正在尝试使用类方法测试模型:

我正在使用factory_boy进行测试,这是我尝试设置测试工厂的方式:

但是,当我尝试调用RoleFactory.find_all()测试时,出现错误:E UnboundExecutionError: Could not locate a bind configuration on mapper Mapper|Role|role, SQL expression or this Session

我尝试meta用我的会话进行monkeypatching并替换该全局会话,但随后出现此错误:E AttributeError: type object 'RoleFactory' has no attribute 'find_all'

我试着打电话RoleFactory.FACTORY_FOR.find_all(),但后来我得到了同样的 UnboundExecutionError。

我是否需要为 factory_boy 做其他事情才能了解类方法?

0 投票
2 回答
6604 浏览

python - django factory boy factory 与 OneToOne 关系及相关领域

我正在使用Factory Boy为我的 django 应用程序创建测试工厂。我遇到问题的模型是一个非常基本的帐户模型,它与 django 用户身份验证模型具有 OneToOne 关系(使用 django < 1.5):

这是我的工厂:

所以我希望工厂男孩在调用 AccountFactory 时创建一个相关的 UserFactory:

但是,在运行测试时,似乎正在创建多个用户模型,并且我看到了一个完整性错误:

文档确实提到在处理循环导入时要注意循环,但我不确定这是否发生了,也不知道我将如何解决它。文档

如果任何熟悉 Factory Boy 的人都可以插话或提供一些关于可能导致此完整性错误的原因的见解,我们将不胜感激!

0 投票
3 回答
3205 浏览

python - FactoryBoy 将属性分配给 SubFactory 的属性

在 FactoryBoy 中定义 ModelFactory 时,我需要访问由 SubFactory 创建的另一个模型的属性并将其分配给此 ModelFactory 的属性。

这就是我想要做的:

显然这不起作用,因为没有 AdminUser 对象可以访问 MyModelFactory 类定义中的 id。

这就是我所做的,但它很丑:

我试图通读Factory_Boy 文档,但没有看到允许我懒惰地访问该属性的类或函数。有没有人有什么建议?

0 投票
2 回答
4317 浏览

python - factory_boy 对象似乎缺少主键

当我创建 factory_boy 对象时,该对象似乎没有主键,我不知道为什么。这是我的模型和工厂:

现在根据有关关联的 factory_boy文档,如果我创建一个用户实例,我应该得到一个“id”字段。但是,我没有。这就是我得到的(在解释器中):

相似地:

文档说这些 user.id 和 user_profile.id 命令应该返回“False”而不是“True”,因为我正在创建(而不是构建)factory_boy 实例。我在这里想念什么?为什么我在创建这些实例时没有获得“id”值?似乎我可以获得 id 的唯一方法是在我的工厂中显式创建一个“id”属性。但是,我在文档中的任何地方都没有看到这样做,所以我认为这不是你应该做的。

谢谢。

0 投票
5 回答
6442 浏览

python - 避免与 factory_boy 工厂重复

我正在使用factory_boy创建测试夹具。我有两个简单的工厂,由 SQLAlchemy 模型支持(简化如下)。

我希望能够AddressFactory.create()多次调用,Country如果它不存在则让它创建一个,否则我希望它重新使用现有记录。

我的问题是:如何设置这些工厂,以便 factory_boy 不会在每次创建地址时都尝试创建新国家?

0 投票
1 回答
1578 浏览

django - 抑制 factory_boy 捕获的日志信息?

当测试失败或产生错误时,有没有办法抑制(即隐藏)工厂男孩生成的捕获的日志信息块?我说的是这个:

很多时候,这些信息对于解决问题并不相关或没有必要,只是我必须向上滚动查看导致错误的原因的很多东西。

谢谢。

0 投票
1 回答
1657 浏览

python - Factory Boy 与自定义对象

问题:

在以下情况下使用 Factory Boy 有什么优势?我真的不明白为什么我不应该只提供我自己的自定义对象。如果我错了,请告诉我为什么。

我在测试期间使用 Factory Boy 来创建用户实例,这会动态创建一个 UserProfile 对象(来自 Factory_Boy文档的标准配方)。

Data 类创建将在发布期间传递到表单的数据(我正在使用的其他方法为 self.client.post 登录、注册和激活用户的方法传递数据。除非我遗漏了什么,否则我会有为每种情况构建一个单独的 DjangoModelFactory 子类,以便在数据要求不同的地方使用 ClassName.attributes()。我朝这个方向走的另一个原因是 UserProfile 有一个 User 外键,所以我无法调用 UserProfileFactory .attributes() 直接,只有 UserFactory.attributes()。为什么不像我一样自己做呢?

然后我在集成测试期间在以下上下文中使用这样的数据:

0 投票
2 回答
2835 浏览

python - 日期时间字段收到一个简单的日期时间

DateTimeField received a naive datetime while time zone support is active遇到了一个扭曲的经典警告。当我运行使用由factory_boy. 这是一个工厂的例子:

如您所见,我正在使用来自 Django 时区的 now() 方法,它应该处理整个简单的 datetime 事情,但事实并非如此。这是模型的样子:

另外,在我的 settings.py 文件中,我设置了USE_TZ = True.

我已经尝试安装pytz和使用它的库来创建一个日期时间对象来填充工厂中的字段,但这也不起作用。

我知道我可以抑制警告,但它已经开始在代码的其他区域咬我,我想深入了解它。. .