Создание модели FactoryBot Ha sh со сложной структурой, включая несколько вложенных атрибутов - PullRequest
0 голосов
/ 29 мая 2020

Я реализую набор тестов API, управляемых Cucumber, и наткнулся на одну конкретную модель c, которая имеет несколько вложенных элементов, например:

factory :human_being, class: Hash do
  human {
    name {
      first_name { Faker::Name.first_name }
      last_name  { Faker::Name.last_name }
    } 
    age { rand(1..100) }
  }
  initialize_with { attributes }
end

Результат, которого я хотел достичь, должен выглядеть вот так:

{   
  :human => {
    :name => {
      :first_name => "mike",
      :last_name => "blob"
      },
    :age => 16    
  }
}

Я вызываю создание с помощью FactoryBot.build (: human_being) и получаю undefined method 'name' for #<FactoryBot::SyntaxRunner:0x00007fd640a39a80>

В моем env.rb есть строки World(FactoryBot::Syntax::Methods) / FactoryBot.find_definitions .

Я поискал несколько ответов относительно вложенных атрибутов / ассоциаций / черт, но я не нашел подходящего способа получить то, что хочу. Извините, если пост дублируется, заранее благодарим за помощь.

1 Ответ

0 голосов
/ 29 мая 2020

Хорошо, похоже, я нашел решение сразу после публикации вопроса. В настоящее время следующая модель создает Ha sh, которое я описал в вопросе:

factory :human_being, class: Hash do
  human { {
    name: {
      first_name: Faker::Name.first_name,
      last_name:  Faker::Name.last_name,
    },
    age: rand(1..100),
    sex: %w(male female other).sample
  } }
  initialize_with { attributes }
end

Хотя я не уверен, что это полностью правильный ответ с точки зрения рекомендаций, но, по крайней мере, он работает для моего конкретного случая .

source (см. «Определение фабрик»): из-за синтаксиса блока в Ruby для определения атрибутов как хэшей (например, для сериализованных / JSON столбцов) требуется два наборы фигурных скобок:

factory :program do
  configuration { { auto_resolve: false, auto_define: true } }
end
...