Factory_bot_rails 创建带有特征的哈希值。

问题描述 投票:0回答:1

我想用以下方法创建哈希值 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, projectissue_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

ruby-on-rails ruby rspec factory-bot
1个回答
0
投票

FactoryBot的工作原理和你使用的不一样。

1)FactoryBot是 一个Hash,它是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)
© www.soinside.com 2019 - 2024. All rights reserved.