有没有在工厂女孩一个简单的方法来建立一个新的工厂只有一个不存在?

如果没有一个简单的方法,什么是最简洁的手段,以确保只有一个工厂是一组的黄瓜功能(和/或规格)产生的?

例如,我需要一个单一的(公用的)管理员在“用户”模式记录测试多个黄瓜特征。理想情况下,我想这样做没有包装条件语句周围的每一个创建管理员的一步,但没有击中“记录已经存在”的错误。

任何建议表示赞赏。

有帮助吗?

解决方案

创建辅助方法来创建或返回一个单一实例。

def create_or_return_admin_user
  @user ||= Factory(:user, :admin => true)
end

和再调用

create_or_return_admin_user

在测试

其他提示

您可以这样做,在Factory_girl而已,你需要创建一个方法检查是否存在记录,或者如果它不是在你的数据库。

如果你这样做,在设置(Rspec的前),你可以肯定的是,只有一个记录。

我们已经实现了这样的:

在黄瓜的“背景”场景中的特征文件中的每个“情景”之前执行。因此,在每一个特征文件的顶部(在“背景”),我们建立一个用户,并给用户管理员角色。

现在这给你一个管理员用户准备就绪,可在每个“情景”。

请注意,这个管理员用户将无法在DB的特征求生存,以特色,如黄瓜正在处理中的交易记录。所以,如果你需要的东西添加到该管理员用户在一个特征,并从另一个特点使用它,做它的方式是不可用的。但是,当我明白你的问题,你只是想确保你不会试图创建的管理员用户如果已经创造了它。在“背景”确保它仅仅为每个功能创建的一次创建管理用户。

请注意,你可以创建,而不是在每个“方案”的管理员用户。将黄瓜从DB在“方案”的结尾处,删除它,所以在任何时候,你也只会有一个管理员用户。然而,这不干燥和不应该做的(除非你只需要在一些“场景”的管理员用户,并明确要求它不存在于其他的“场景”)。

黄瓜 '背景' 例如使用FactoryGirl步骤定义:

Background:
  Given the following user exists:
    | Name  | Role          |
    | Admin | Administrator |

工厂定义:

factory :user do
  name 'John Doe'
  role 'Guest'
end
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top