Factory_bot_rails создать ха sh с чертой - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу создать га sh, как показано ниже, используя factory_bot_rails

let(:expected_hash) do
  {
    'fields' => {
      'summary' => 'member added as a collaborator to repository',
      'description' => "[OutsideCollaboratorAdded]\n-----------------\nMember: member,\n Added to project: repository,\n by: sender",
      'project' => { 'id' => '22501' },
      'issuetype' => { 'id' => '11800' },
      'customfield_14400' => '2020-04-23'
    }
  }
end

Идея состоит в том, чтобы иметь следующие поля: summary, description, project и issue_type для быть редактируемым с помощью trait. Поэтому я пытался что-то вроде:

  factory :expected_ticket_fields do
    fields {{
      summary => 'test',
      description => 'test desc',
      customfield_14400 => '2020-04-23'
      }}

    trait :member_added do
      summary { 'member added as a collaborator to repository' }
      description { '[OutsideCollaboratorAdded]\n-----------------\nMember: member,\n Added to project: repository,\n by: sender' }
      project {{ 'id' => '22501' }}
    end
  end

И в спецификации:

  before do
    hash = create(:expected_ticket_fields)
    hash.member_added
  end

Но я получаю сообщение об ошибке: uninitialized constant ExpectedTicketFields

1 Ответ

0 голосов
/ 23 апреля 2020

FactoryBot работает не так, как вы его используете.

1) FactoryBot - это , а не a Ha sh, это тип объекта FactoryBot. 2) ActiveRecord с тем же именем должен существовать (например, «Ticket» или «Project»), чтобы FactoryBot работал.

Вы хотите создать признак, а затем, если вы хотите этот тип Ticket, вы бы написали это так:

factory :ticket do
  # you can specify the default `summary`
  summary { 'This is a ticket' }
  trait :ticket_with_member_added do
    summary { 'This is a ticket with a member added' }
    description { '[OutsideCollaboratorAdded]\n-----------------\nMember: member,\n Added to project: repository,\n by: sender' }
    # If you are planning on using a Project ActiveRecord, then you must ALSO create a factory for project, then this will trigger a Project to be created.
    project
  end
end

# In your tests
ticket = create(:ticket_with_member_added)
...