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