Skip to content

Commit 47a29d2

Browse files
committed
Add unit tests for FactoryBot::Syntax::Default
1 parent 26f3680 commit 47a29d2

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
describe FactoryBot::Syntax::Default do
2+
it "registers a factory via FactoryBot.define" do
3+
define_class("SyntaxDefaultUser") { attr_accessor :name }
4+
5+
FactoryBot.define do
6+
factory :syntax_default_user, class: "SyntaxDefaultUser" do
7+
name { "Test" }
8+
end
9+
end
10+
11+
expect(FactoryBot::Internal.factory_by_name(:syntax_default_user)).to be_a FactoryBot::Factory
12+
end
13+
14+
it "registers a sequence via FactoryBot.define" do
15+
FactoryBot.define do
16+
sequence(:syntax_default_email) { |n| "user#{n}@example.com" }
17+
end
18+
19+
expect(FactoryBot.generate(:syntax_default_email)).to match(/user\d+@example\.com/)
20+
end
21+
22+
it "registers a global trait via FactoryBot.define" do
23+
FactoryBot.define do
24+
trait :syntax_default_admin do
25+
end
26+
end
27+
28+
expect(FactoryBot::Internal.traits.find(:syntax_default_admin)).to be_a FactoryBot::Trait
29+
end
30+
31+
it "modifies an existing factory via FactoryBot.modify" do
32+
define_class("SyntaxModifyUser") { attr_accessor :name }
33+
FactoryBot.define do
34+
factory :syntax_modify_user, class: "SyntaxModifyUser" do
35+
name { "Original" }
36+
end
37+
end
38+
39+
FactoryBot.modify do
40+
factory :syntax_modify_user do
41+
name { "Modified" }
42+
end
43+
end
44+
45+
user = FactoryBot.build(:syntax_modify_user)
46+
expect(user.name).to eq "Modified"
47+
end
48+
49+
it "handles child factories" do
50+
define_class("SyntaxChildUser") { attr_accessor :name, :role }
51+
FactoryBot.define do
52+
factory :syntax_child_user, class: "SyntaxChildUser" do
53+
name { "Test" }
54+
55+
factory :syntax_child_admin do
56+
role { "admin" }
57+
end
58+
end
59+
end
60+
61+
admin = FactoryBot.build(:syntax_child_admin)
62+
expect(admin.name).to eq "Test"
63+
expect(admin.role).to eq "admin"
64+
end
65+
66+
it "evaluates blocks in the context of a new DSL instance" do
67+
define_class("SyntaxRunUser") { attr_accessor :name }
68+
block = proc {
69+
factory :syntax_run_user, class: "SyntaxRunUser" do
70+
name { "from block" }
71+
end
72+
}
73+
74+
FactoryBot::Syntax::Default::DSL.run(block)
75+
76+
user = FactoryBot.build(:syntax_run_user)
77+
expect(user.name).to eq "from block"
78+
end
79+
end

0 commit comments

Comments
 (0)