ruby-on-rails - Rails factory_girl create_list 构建同一个对象

标签 ruby-on-rails ruby testing factory-bot

我有以下工厂:

factory :product, class: Product do
  name        Faker::Commerce.product_name
  description Faker::Lorem.paragraph
  price       Faker::Number.number(3)
end

当我调用 FactoryGirl.create_list(:product, 3) 时,它会在数据库中插入相同的产品,只是 ID 不同。我希望每种产品都有不同的名称、描述和价格。

你们知道这个问题的解决方案吗?谢谢!

最佳答案

namedescriptionprice 被视为静态属性;这意味着该值只计算一次(当加载工厂时)并且永远不会改变(以及 Product 的每个实例的数据相同的原因。

相反,将值包装在一个 block 中:

    factory :product, class: Product do
      name        { Faker::Commerce.product_name }
      description { Faker::Lorem.paragraph }
      price       { Faker::Number.number(3) }
    end

每次工厂运行时,都会执行此 block - 对于 Faker,这意味着它将生成一个新值。

关于ruby-on-rails - Rails factory_girl create_list 构建同一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22948087/

相关文章:

json - 离线 JSON 测试仪

java - 更多 Mockito RETURNS_DEEP_STUBS 问题

ruby-on-rails - 从部分重定向回具有部分的同一页面后保持验证错误

ruby-on-rails - Django 还是 Ruby-On-Rails?

ruby-on-rails - 如何将Devise和ActiveAdmin用于同一用户模型?

javascript - 我可以在客户端脚本中使用 JavaScript 以外的语言吗?

mysql - update_all 与字符串连接

ruby-on-rails - jbuilder 与 rails-api/active_model_serializers 在 Rails 4 中处理 JSON

ruby - Redis gem 中的 "Invisible"实例方法

unit-testing - 使用 ActiveSupport::TestCase 进行事件管理 Controller 测试