在 Minitest fixtures 中使用 Faker 的权宜之计

Expediency of using Faker in Minitest fixtures

与现在的许多 Rails 程序员一样,我正在从 RSpec 转向 Minitest。我喜欢在 FactoryGirl 工厂中使用 Faker 生成的测试中拥有漂亮而有意义的数据。然而,我很惊讶地看到 Minitest 装置中的不同方法。在我发现的所有示例中,根本没有使用 Faker。所以我的问题是我应该在 Minitest 中对固定装置使用什么方法。我是否应该使用 Faker 来填充 fixtures?

在你的比赛中使用 Faker 没有错,但我认为你的问题的答案归结为两者之间的根本区别。两者的目的都是为 运行 您的测试提供数据,但工厂是 有潜力生产模型的生成器 。这意味着它们用于创建测试中需要的新对象,特别是,它们用作创建具有有效且可预测数据的新对象的快捷方式,而无需指定每个属性。

FactoryGirl.define do
  factory :user do
    first_name "John"
    last_name  "Doe"
    admin false
  end
end

user = build(:user, first_name: "Joe")

另一方面,固定装置为您提供 应用程序数据库中的真实数据。这些是在测试执行之外创建的,没有经过验证,因此随着应用程序的增长,趋势是必须将所有固定装置作为一个测试数据集来管理。这是反对 fixtures 的一个重要部分,但是 factory 和 fixtures 都有自己的长处和短处。

直接回答你的问题,你没有找到更多使用 Faker 的 fixture 示例的原因可能是因为 fixture 数据是固定的,需要比工厂定义更严格地控​​制,其中一些也可能倾向于使用 Minitest 的开发人员也可能倾向于从他们的 Gemfile 中删除不必要的依赖项。但是如果你想继续使用 Faker 来获取姓名和地址等,没有理由不这样做。