Skip to content

Commit f56d610

Browse files
committed
Add unit tests for FactoryBot::Syntax::Default
Add spec coverage for the Syntax::Default module, DSL, and ModifyDSL classes which previously had no corresponding unit test file. Tests cover factory/sequence/trait registration, factory modification, child factories, and DSL.run block evaluation.
1 parent 26f3680 commit f56d610

1 file changed

Lines changed: 92 additions & 0 deletions

File tree

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

0 commit comments

Comments
 (0)