factory_girl 4.2.0 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +3 -2
- data/Appraisals +3 -7
- data/GETTING_STARTED.md +101 -5
- data/Gemfile +1 -1
- data/Gemfile.lock +56 -48
- data/README.md +5 -12
- data/Rakefile +2 -2
- data/factory_girl.gemspec +1 -0
- data/gemfiles/3.1.gemfile +1 -1
- data/gemfiles/3.1.gemfile.lock +36 -33
- data/gemfiles/3.2.gemfile +1 -1
- data/gemfiles/3.2.gemfile.lock +31 -32
- data/gemfiles/4.0.gemfile +1 -1
- data/gemfiles/4.0.gemfile.lock +51 -50
- data/lib/factory_girl.rb +1 -1
- data/lib/factory_girl/attribute/dynamic.rb +1 -1
- data/lib/factory_girl/callback.rb +1 -1
- data/lib/factory_girl/configuration.rb +2 -1
- data/lib/factory_girl/definition.rb +15 -0
- data/lib/factory_girl/definition_hierarchy.rb +1 -1
- data/lib/factory_girl/definition_proxy.rb +8 -16
- data/lib/factory_girl/errors.rb +3 -0
- data/lib/factory_girl/factory.rb +1 -1
- data/lib/factory_girl/strategy_syntax_method_registrar.rb +9 -0
- data/lib/factory_girl/syntax/default.rb +8 -0
- data/lib/factory_girl/version.rb +1 -1
- data/spec/acceptance/callbacks_spec.rb +76 -0
- data/spec/acceptance/create_pair_spec.rb +32 -0
- data/spec/acceptance/defining_methods_inside_a_factory_spec.rb +17 -0
- data/spec/acceptance/definition_camel_string_spec.rb +15 -0
- data/spec/acceptance/register_strategies_spec.rb +8 -0
- data/spec/acceptance/syntax_methods_within_dynamic_attributes_spec.rb +10 -0
- data/spec/factory_girl/callback_spec.rb +1 -1
- metadata +35 -55
- data/gemfiles/3.0.gemfile +0 -7
- data/gemfiles/3.0.gemfile.lock +0 -81
@@ -46,6 +46,31 @@ describe "callbacks" do
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
describe 'callbacks using Symbol#to_proc' do
|
50
|
+
before do
|
51
|
+
define_model('User') do
|
52
|
+
def confirmed?
|
53
|
+
!!@confirmed
|
54
|
+
end
|
55
|
+
|
56
|
+
def confirm!
|
57
|
+
@confirmed = true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
FactoryGirl.define do
|
62
|
+
factory :user do
|
63
|
+
after :build, &:confirm!
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'runs the callback correctly' do
|
69
|
+
user = FactoryGirl.build(:user)
|
70
|
+
expect(user).to be_confirmed
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
49
74
|
describe "callbacks using syntax methods without referencing FactoryGirl explicitly" do
|
50
75
|
before do
|
51
76
|
define_model("User", first_name: :string, last_name: :string)
|
@@ -175,3 +200,54 @@ describe 'binding a callback to multiple callbacks' do
|
|
175
200
|
expect(FactoryGirl.build_stubbed(:user, name: 'John Doe').name).to eq 'JOHN DOE'
|
176
201
|
end
|
177
202
|
end
|
203
|
+
|
204
|
+
describe 'global callbacks' do
|
205
|
+
include FactoryGirl::Syntax::Methods
|
206
|
+
|
207
|
+
before do
|
208
|
+
define_model('User', name: :string)
|
209
|
+
define_model('Company', name: :string)
|
210
|
+
|
211
|
+
FactoryGirl.define do
|
212
|
+
after :build do |object|
|
213
|
+
object.name = case object.class.to_s
|
214
|
+
when 'User' then 'John Doe'
|
215
|
+
when 'Company' then 'Acme Suppliers'
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
after :create do |object|
|
220
|
+
object.name = "#{object.name}!!!"
|
221
|
+
end
|
222
|
+
|
223
|
+
trait :awesome do
|
224
|
+
after :build do |object|
|
225
|
+
object.name = "___#{object.name}___"
|
226
|
+
end
|
227
|
+
|
228
|
+
after :create do |object|
|
229
|
+
object.name = "A#{object.name}Z"
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
factory :user do
|
234
|
+
after :build do |user|
|
235
|
+
user.name = user.name.downcase
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
factory :company do
|
240
|
+
after :build do |company|
|
241
|
+
company.name = company.name.upcase
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
it 'triggers after build callbacks for all factories' do
|
248
|
+
expect(build(:user).name).to eq 'john doe'
|
249
|
+
expect(create(:user).name).to eq 'john doe!!!'
|
250
|
+
expect(create(:user, :awesome).name).to eq 'A___john doe___!!!Z'
|
251
|
+
expect(build(:company).name).to eq 'ACME SUPPLIERS'
|
252
|
+
end
|
253
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "create multiple instances" do
|
4
|
+
before do
|
5
|
+
define_model('Post', title: :string, position: :integer)
|
6
|
+
|
7
|
+
FactoryGirl.define do
|
8
|
+
factory(:post) do |post|
|
9
|
+
post.title "Through the Looking Glass"
|
10
|
+
post.position { rand(10**4) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "without default attributes" do
|
16
|
+
subject { FactoryGirl.create_pair(:post) }
|
17
|
+
|
18
|
+
its(:length) { should eq 2 }
|
19
|
+
|
20
|
+
it "creates all the posts" do
|
21
|
+
subject.each do |record|
|
22
|
+
expect(record).not_to be_new_record
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "uses the default factory values" do
|
27
|
+
subject.each do |record|
|
28
|
+
expect(record.title).to eq "Through the Looking Glass"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'defining methods inside FactoryGirl' do
|
4
|
+
it 'raises with a meaningful message' do
|
5
|
+
define_model('User')
|
6
|
+
|
7
|
+
expect do
|
8
|
+
FactoryGirl.define do
|
9
|
+
factory :user do
|
10
|
+
def generate_name
|
11
|
+
'John Doe'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end.to raise_error FactoryGirl::MethodDefinitionError, /Defining methods in blocks \(trait or factory\) is not supported \(generate_name\)/
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "an instance generated by a factory named a camel case string " do
|
4
|
+
before do
|
5
|
+
define_model("UserModel")
|
6
|
+
|
7
|
+
FactoryGirl.define do
|
8
|
+
factory 'UserModel', class: UserModel
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "registers the UserModel factory" do
|
13
|
+
expect(FactoryGirl.factory_by_name('UserModel')).to be_a(FactoryGirl::Factory)
|
14
|
+
end
|
15
|
+
end
|
@@ -49,6 +49,14 @@ describe "register custom strategies" do
|
|
49
49
|
expect(inserted_items.length).to eq 2
|
50
50
|
expect(inserted_items.map(&:name)).to eq ["Custom strategy", "Custom strategy"]
|
51
51
|
end
|
52
|
+
|
53
|
+
it "allows using the *_pair method to build a list using a custom strategy" do
|
54
|
+
FactoryGirl.register_strategy(:insert, custom_strategy)
|
55
|
+
|
56
|
+
inserted_items = FactoryGirl.insert_pair(:named_object)
|
57
|
+
expect(inserted_items.length).to eq 2
|
58
|
+
expect(inserted_items.map(&:name)).to eq ["Custom strategy", "Custom strategy"]
|
59
|
+
end
|
52
60
|
end
|
53
61
|
|
54
62
|
describe "including FactoryGirl::Syntax::Methods when custom strategies have been declared" do
|
@@ -38,4 +38,14 @@ describe "syntax methods within dynamic attributes" do
|
|
38
38
|
expect(FactoryGirl.build(:post).title).to eq "generate result"
|
39
39
|
expect(FactoryGirl.attributes_for(:post)[:title]).to be_nil
|
40
40
|
end
|
41
|
+
|
42
|
+
it 'allows syntax methods to be used when the block has an arity of 1' do
|
43
|
+
FactoryGirl.define do
|
44
|
+
factory :post_using_block_with_variable, parent: :post do
|
45
|
+
user {|_| build(:user) }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
expect(FactoryGirl.build(:post_using_block_with_variable).user).to be_instance_of(User)
|
50
|
+
end
|
41
51
|
end
|
@@ -30,7 +30,7 @@ describe FactoryGirl::Callback do
|
|
30
30
|
it "allows valid callback names to be assigned" do
|
31
31
|
FactoryGirl.callback_names.each do |callback_name|
|
32
32
|
expect { FactoryGirl::Callback.new(callback_name, -> {}) }.
|
33
|
-
to_not raise_error
|
33
|
+
to_not raise_error
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factory_girl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
5
|
-
prerelease:
|
4
|
+
version: 4.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Josh Clayton
|
@@ -10,28 +9,25 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-11-04 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: activesupport
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - '>='
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: 3.0.0
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - '>='
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: 3.0.0
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: rspec
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
32
|
- - ~>
|
37
33
|
- !ruby/object:Gem::Version
|
@@ -39,7 +35,6 @@ dependencies:
|
|
39
35
|
type: :development
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
39
|
- - ~>
|
45
40
|
- !ruby/object:Gem::Version
|
@@ -47,7 +42,6 @@ dependencies:
|
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: cucumber
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
46
|
- - ~>
|
53
47
|
- !ruby/object:Gem::Version
|
@@ -55,7 +49,6 @@ dependencies:
|
|
55
49
|
type: :development
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
53
|
- - ~>
|
61
54
|
- !ruby/object:Gem::Version
|
@@ -63,87 +56,76 @@ dependencies:
|
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: timecop
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
|
-
- -
|
60
|
+
- - '>='
|
69
61
|
- !ruby/object:Gem::Version
|
70
62
|
version: '0'
|
71
63
|
type: :development
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
|
-
- -
|
67
|
+
- - '>='
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '0'
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: simplecov
|
81
72
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
73
|
requirements:
|
84
|
-
- -
|
74
|
+
- - '>='
|
85
75
|
- !ruby/object:Gem::Version
|
86
76
|
version: '0'
|
87
77
|
type: :development
|
88
78
|
prerelease: false
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
|
-
- -
|
81
|
+
- - '>='
|
93
82
|
- !ruby/object:Gem::Version
|
94
83
|
version: '0'
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
85
|
name: aruba
|
97
86
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
87
|
requirements:
|
100
|
-
- -
|
88
|
+
- - '>='
|
101
89
|
- !ruby/object:Gem::Version
|
102
90
|
version: '0'
|
103
91
|
type: :development
|
104
92
|
prerelease: false
|
105
93
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
94
|
requirements:
|
108
|
-
- -
|
95
|
+
- - '>='
|
109
96
|
- !ruby/object:Gem::Version
|
110
97
|
version: '0'
|
111
98
|
- !ruby/object:Gem::Dependency
|
112
99
|
name: mocha
|
113
100
|
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
101
|
requirements:
|
116
|
-
- -
|
102
|
+
- - '>='
|
117
103
|
- !ruby/object:Gem::Version
|
118
104
|
version: 0.12.8
|
119
105
|
type: :development
|
120
106
|
prerelease: false
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
108
|
requirements:
|
124
|
-
- -
|
109
|
+
- - '>='
|
125
110
|
- !ruby/object:Gem::Version
|
126
111
|
version: 0.12.8
|
127
112
|
- !ruby/object:Gem::Dependency
|
128
113
|
name: bourne
|
129
114
|
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
115
|
requirements:
|
132
|
-
- -
|
116
|
+
- - '>='
|
133
117
|
- !ruby/object:Gem::Version
|
134
118
|
version: '0'
|
135
119
|
type: :development
|
136
120
|
prerelease: false
|
137
121
|
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
122
|
requirements:
|
140
|
-
- -
|
123
|
+
- - '>='
|
141
124
|
- !ruby/object:Gem::Version
|
142
125
|
version: '0'
|
143
126
|
- !ruby/object:Gem::Dependency
|
144
127
|
name: appraisal
|
145
128
|
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
129
|
requirements:
|
148
130
|
- - ~>
|
149
131
|
- !ruby/object:Gem::Version
|
@@ -151,7 +133,6 @@ dependencies:
|
|
151
133
|
type: :development
|
152
134
|
prerelease: false
|
153
135
|
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
136
|
requirements:
|
156
137
|
- - ~>
|
157
138
|
- !ruby/object:Gem::Version
|
@@ -159,38 +140,35 @@ dependencies:
|
|
159
140
|
- !ruby/object:Gem::Dependency
|
160
141
|
name: sqlite3
|
161
142
|
requirement: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
143
|
requirements:
|
164
|
-
- -
|
144
|
+
- - '>='
|
165
145
|
- !ruby/object:Gem::Version
|
166
146
|
version: '0'
|
167
147
|
type: :development
|
168
148
|
prerelease: false
|
169
149
|
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
150
|
requirements:
|
172
|
-
- -
|
151
|
+
- - '>='
|
173
152
|
- !ruby/object:Gem::Version
|
174
153
|
version: '0'
|
175
154
|
- !ruby/object:Gem::Dependency
|
176
155
|
name: yard
|
177
156
|
requirement: !ruby/object:Gem::Requirement
|
178
|
-
none: false
|
179
157
|
requirements:
|
180
|
-
- -
|
158
|
+
- - '>='
|
181
159
|
- !ruby/object:Gem::Version
|
182
160
|
version: '0'
|
183
161
|
type: :development
|
184
162
|
prerelease: false
|
185
163
|
version_requirements: !ruby/object:Gem::Requirement
|
186
|
-
none: false
|
187
164
|
requirements:
|
188
|
-
- -
|
165
|
+
- - '>='
|
189
166
|
- !ruby/object:Gem::Version
|
190
167
|
version: '0'
|
191
|
-
description:
|
192
|
-
|
193
|
-
|
168
|
+
description: |-
|
169
|
+
factory_girl provides a framework and DSL for defining and
|
170
|
+
using factories - less error-prone, more explicit, and
|
171
|
+
all-around easier to work with than fixtures.
|
194
172
|
email:
|
195
173
|
- jclayton@thoughtbot.com
|
196
174
|
- jferris@thoughtbot.com
|
@@ -220,8 +198,6 @@ files:
|
|
220
198
|
- features/step_definitions/factory_girl_steps.rb
|
221
199
|
- features/support/env.rb
|
222
200
|
- features/support/factories.rb
|
223
|
-
- gemfiles/3.0.gemfile
|
224
|
-
- gemfiles/3.0.gemfile.lock
|
225
201
|
- gemfiles/3.1.gemfile
|
226
202
|
- gemfiles/3.1.gemfile.lock
|
227
203
|
- gemfiles/3.2.gemfile
|
@@ -292,8 +268,11 @@ files:
|
|
292
268
|
- spec/acceptance/build_stubbed_spec.rb
|
293
269
|
- spec/acceptance/callbacks_spec.rb
|
294
270
|
- spec/acceptance/create_list_spec.rb
|
271
|
+
- spec/acceptance/create_pair_spec.rb
|
295
272
|
- spec/acceptance/create_spec.rb
|
296
273
|
- spec/acceptance/define_child_before_parent_spec.rb
|
274
|
+
- spec/acceptance/defining_methods_inside_a_factory_spec.rb
|
275
|
+
- spec/acceptance/definition_camel_string_spec.rb
|
297
276
|
- spec/acceptance/definition_spec.rb
|
298
277
|
- spec/acceptance/definition_without_block_spec.rb
|
299
278
|
- spec/acceptance/global_initialize_with_spec.rb
|
@@ -347,28 +326,28 @@ files:
|
|
347
326
|
- spec/support/matchers/trait.rb
|
348
327
|
- spec/support/shared_examples/strategy.rb
|
349
328
|
homepage: https://github.com/thoughtbot/factory_girl
|
350
|
-
licenses:
|
329
|
+
licenses:
|
330
|
+
- MIT
|
331
|
+
metadata: {}
|
351
332
|
post_install_message:
|
352
333
|
rdoc_options: []
|
353
334
|
require_paths:
|
354
335
|
- lib
|
355
336
|
required_ruby_version: !ruby/object:Gem::Requirement
|
356
|
-
none: false
|
357
337
|
requirements:
|
358
|
-
- -
|
338
|
+
- - '>='
|
359
339
|
- !ruby/object:Gem::Version
|
360
340
|
version: 1.9.2
|
361
341
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
362
|
-
none: false
|
363
342
|
requirements:
|
364
|
-
- -
|
343
|
+
- - '>='
|
365
344
|
- !ruby/object:Gem::Version
|
366
345
|
version: '0'
|
367
346
|
requirements: []
|
368
347
|
rubyforge_project:
|
369
|
-
rubygems_version: 1.
|
348
|
+
rubygems_version: 2.1.5
|
370
349
|
signing_key:
|
371
|
-
specification_version:
|
350
|
+
specification_version: 4
|
372
351
|
summary: factory_girl provides a framework and DSL for defining and using model instance
|
373
352
|
factories.
|
374
353
|
test_files:
|
@@ -378,8 +357,6 @@ test_files:
|
|
378
357
|
- features/step_definitions/factory_girl_steps.rb
|
379
358
|
- features/support/env.rb
|
380
359
|
- features/support/factories.rb
|
381
|
-
- gemfiles/3.0.gemfile
|
382
|
-
- gemfiles/3.0.gemfile.lock
|
383
360
|
- gemfiles/3.1.gemfile
|
384
361
|
- gemfiles/3.1.gemfile.lock
|
385
362
|
- gemfiles/3.2.gemfile
|
@@ -398,8 +375,11 @@ test_files:
|
|
398
375
|
- spec/acceptance/build_stubbed_spec.rb
|
399
376
|
- spec/acceptance/callbacks_spec.rb
|
400
377
|
- spec/acceptance/create_list_spec.rb
|
378
|
+
- spec/acceptance/create_pair_spec.rb
|
401
379
|
- spec/acceptance/create_spec.rb
|
402
380
|
- spec/acceptance/define_child_before_parent_spec.rb
|
381
|
+
- spec/acceptance/defining_methods_inside_a_factory_spec.rb
|
382
|
+
- spec/acceptance/definition_camel_string_spec.rb
|
403
383
|
- spec/acceptance/definition_spec.rb
|
404
384
|
- spec/acceptance/definition_without_block_spec.rb
|
405
385
|
- spec/acceptance/global_initialize_with_spec.rb
|