factory_girl 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -6,9 +6,10 @@ require 'rcov/rcovtask'
6
6
  require 'date'
7
7
 
8
8
  require 'spec/rake/spectask'
9
+ require 'cucumber/rake/task'
9
10
 
10
- desc 'Default: run the specs.'
11
- task :default => :spec
11
+ desc 'Default: run the specs and features.'
12
+ task :default => [:spec, :features]
12
13
 
13
14
  Spec::Rake::SpecTask.new do |t|
14
15
  t.spec_opts = ['--options', "spec/spec.opts"]
@@ -37,7 +38,7 @@ end
37
38
 
38
39
  spec = Gem::Specification.new do |s|
39
40
  s.name = %q{factory_girl}
40
- s.version = "1.2.2"
41
+ s.version = "1.2.3"
41
42
  s.summary = %q{factory_girl provides a framework and DSL for defining and
42
43
  using model instance factories.}
43
44
  s.description = %q{factory_girl provides a framework and DSL for defining and
@@ -73,3 +74,8 @@ task :gemspec do
73
74
  f.write spec.to_ruby
74
75
  end
75
76
  end
77
+
78
+ Cucumber::Rake::Task.new(:features) do |t|
79
+ t.fork = true
80
+ t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'progress')]
81
+ end
@@ -9,6 +9,7 @@ require 'factory_girl/attribute'
9
9
  require 'factory_girl/attribute/static'
10
10
  require 'factory_girl/attribute/dynamic'
11
11
  require 'factory_girl/attribute/association'
12
+ require 'factory_girl/attribute/callback'
12
13
  require 'factory_girl/sequence'
13
14
  require 'factory_girl/aliases'
14
15
 
@@ -3,6 +3,8 @@ class Factory
3
3
 
4
4
  class Association < Attribute #:nodoc:
5
5
 
6
+ attr_reader :factory
7
+
6
8
  def initialize(name, factory, overrides)
7
9
  super(name)
8
10
  @factory = factory
@@ -0,0 +1,16 @@
1
+ class Factory
2
+ class Attribute #:nodoc:
3
+
4
+ class Callback < Attribute #:nodoc:
5
+ def initialize(name, block)
6
+ @name = name.to_sym
7
+ @block = block
8
+ end
9
+
10
+ def add_to(proxy)
11
+ proxy.add_callback(name, @block)
12
+ end
13
+ end
14
+
15
+ end
16
+ end
@@ -4,6 +4,10 @@ class Factory
4
4
  class AssociationDefinitionError < RuntimeError
5
5
  end
6
6
 
7
+ # Raised when a callback is defined that has an invalid name
8
+ class InvalidCallbackNameError < RuntimeError
9
+ end
10
+
7
11
  class << self
8
12
  attr_accessor :factories #:nodoc:
9
13
 
@@ -184,6 +188,25 @@ class Factory
184
188
  add_attribute(name) { s.next }
185
189
  end
186
190
 
191
+ def after_build(&block)
192
+ callback(:after_build, &block)
193
+ end
194
+
195
+ def after_create(&block)
196
+ callback(:after_create, &block)
197
+ end
198
+
199
+ def after_stub(&block)
200
+ callback(:after_stub, &block)
201
+ end
202
+
203
+ def callback(name, &block)
204
+ unless [:after_build, :after_create, :after_stub].include?(name.to_sym)
205
+ raise InvalidCallbackNameError, "#{name} is not a valid callback name. Valid callback names are :after_build, :after_create, and :after_stub"
206
+ end
207
+ @attributes << Attribute::Callback.new(name.to_sym, block)
208
+ end
209
+
187
210
  # Generates and returns a Hash of attributes from this factory. Attributes
188
211
  # can be individually overridden by passing in a Hash of attribute => value
189
212
  # pairs.
@@ -293,12 +316,24 @@ class Factory
293
316
  proxy.result
294
317
  end
295
318
 
296
- private
297
-
298
319
  def self.factory_by_name (name)
299
320
  factories[name.to_sym] or raise ArgumentError.new("No such factory: #{name.to_s}")
300
321
  end
301
-
322
+
323
+ def human_name(*args, &block)
324
+ if args.size == 0 && block.nil?
325
+ factory_name.to_s.gsub('_', ' ')
326
+ else
327
+ add_attribute(:human_name, *args, &block)
328
+ end
329
+ end
330
+
331
+ def associations
332
+ attributes.select {|attribute| attribute.is_a?(Attribute::Association) }
333
+ end
334
+
335
+ private
336
+
302
337
  def class_for (class_or_to_s)
303
338
  if class_or_to_s.respond_to?(:to_sym)
304
339
  Object.const_get(variable_name_to_class_name(class_or_to_s))
@@ -316,7 +351,7 @@ class Factory
316
351
  end
317
352
 
318
353
  def attribute_defined? (name)
319
- !@attributes.detect {|attr| attr.name == name }.nil?
354
+ !@attributes.detect {|attr| attr.name == name && !attr.is_a?(Factory::Attribute::Callback) }.nil?
320
355
  end
321
356
 
322
357
  def assert_valid_options(options)
@@ -1,6 +1,9 @@
1
1
  class Factory
2
2
 
3
3
  class Proxy #:nodoc:
4
+
5
+ attr_reader :callbacks
6
+
4
7
  def initialize(klass)
5
8
  end
6
9
 
@@ -14,6 +17,20 @@ class Factory
14
17
  def associate(name, factory, attributes)
15
18
  end
16
19
 
20
+ def add_callback(name, block)
21
+ @callbacks ||= {}
22
+ @callbacks[name] ||= []
23
+ @callbacks[name] << block
24
+ end
25
+
26
+ def run_callbacks(name)
27
+ if @callbacks && @callbacks[name]
28
+ @callbacks[name].each do |block|
29
+ block.arity.zero? ? block.call : block.call(@instance)
30
+ end
31
+ end
32
+ end
33
+
17
34
  # Generates an association using the current build strategy.
18
35
  #
19
36
  # Arguments:
@@ -22,6 +22,7 @@ class Factory
22
22
  end
23
23
 
24
24
  def result
25
+ run_callbacks(:after_build)
25
26
  @instance
26
27
  end
27
28
  end
@@ -2,7 +2,9 @@ class Factory
2
2
  class Proxy #:nodoc:
3
3
  class Create < Build #:nodoc:
4
4
  def result
5
+ run_callbacks(:after_build)
5
6
  @instance.save!
7
+ run_callbacks(:after_create)
6
8
  @instance
7
9
  end
8
10
  end
@@ -4,9 +4,9 @@ class Factory
4
4
  @@next_id = 1000
5
5
 
6
6
  def initialize(klass)
7
- @stub = klass.new
8
- @stub.id = next_id
9
- @stub.instance_eval do
7
+ @instance = klass.new
8
+ @instance.id = next_id
9
+ @instance.instance_eval do
10
10
  def new_record?
11
11
  id.nil?
12
12
  end
@@ -26,11 +26,11 @@ class Factory
26
26
  end
27
27
 
28
28
  def get(attribute)
29
- @stub.send(attribute)
29
+ @instance.send(attribute)
30
30
  end
31
31
 
32
32
  def set(attribute, value)
33
- @stub.send(:"#{attribute}=", value)
33
+ @instance.send(:"#{attribute}=", value)
34
34
  end
35
35
 
36
36
  def associate(name, factory, attributes)
@@ -42,7 +42,8 @@ class Factory
42
42
  end
43
43
 
44
44
  def result
45
- @stub
45
+ run_callbacks(:after_stub)
46
+ @instance
46
47
  end
47
48
  end
48
49
  end
@@ -0,0 +1,54 @@
1
+ module FactoryGirlStepHelpers
2
+ def convert_association_string_to_instance(factory_name, assignment)
3
+ attribute, value = assignment.split(':', 2)
4
+ attributes = convert_human_hash_to_attribute_hash(attribute => value.strip)
5
+ factory = Factory.factory_by_name(factory_name)
6
+ model_class = factory.build_class
7
+ model_class.find(:first, :conditions => attributes) or
8
+ Factory(factory_name, attributes)
9
+ end
10
+
11
+ def convert_human_hash_to_attribute_hash(human_hash, associations = [])
12
+ human_hash.inject({}) do |attribute_hash, (human_key, value)|
13
+ key = human_key.downcase.gsub(' ', '_').to_sym
14
+ if association = associations.detect {|association| association.name == key }
15
+ value = convert_association_string_to_instance(association.factory, value)
16
+ end
17
+ attribute_hash.merge(key => value)
18
+ end
19
+ end
20
+ end
21
+
22
+ World(FactoryGirlStepHelpers)
23
+
24
+ Factory.factories.values.each do |factory|
25
+ # TODO: support irregular pluralizations
26
+ Given /^the following #{factory.human_name}s? exists?:$/ do |table|
27
+ table.hashes.each do |human_hash|
28
+ attributes = convert_human_hash_to_attribute_hash(human_hash, factory.associations)
29
+ Factory.create(factory.factory_name, attributes)
30
+ end
31
+ end
32
+
33
+ Given /^an? #{factory.human_name} exists$/ do
34
+ Factory(factory.factory_name)
35
+ end
36
+
37
+ Given /^(\d+) #{factory.human_name}s exist$/ do |count|
38
+ count.to_i.times { Factory(factory.human_name) }
39
+ end
40
+
41
+ if factory.build_class.respond_to?(:columns)
42
+ factory.build_class.columns.each do |column|
43
+ human_column_name = column.name.downcase.gsub('_', ' ')
44
+ Given /^an? #{factory.human_name} exists with an? #{human_column_name} of "([^"]*)"$/i do |value|
45
+ Factory(factory.factory_name, column.name => value)
46
+ end
47
+
48
+ Given /^(\d+) #{factory.human_name}s exist with an? #{human_column_name} of "([^"]*)"$/i do |count, value|
49
+ count.to_i.times { Factory(factory.factory_name, column.name => value) }
50
+ end
51
+ end
52
+ end
53
+ end
54
+
@@ -12,6 +12,10 @@ describe Factory::Attribute::Association do
12
12
  @attr.name.should == @name
13
13
  end
14
14
 
15
+ it "should have a factory" do
16
+ @attr.factory.should == @factory
17
+ end
18
+
15
19
  it "should tell the proxy to associate when being added to a proxy" do
16
20
  proxy = "proxy"
17
21
  stub(proxy).associate
@@ -0,0 +1,23 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'spec_helper'))
2
+
3
+ describe Factory::Attribute::Callback do
4
+ before do
5
+ @name = :after_create
6
+ @block = proc{ 'block' }
7
+ @attr = Factory::Attribute::Callback.new(@name, @block)
8
+ end
9
+
10
+ it "should have a name" do
11
+ @attr.name.should == @name
12
+ end
13
+
14
+ it "should set its callback on a proxy" do
15
+ @proxy = "proxy"
16
+ mock(@proxy).add_callback(@name, @block)
17
+ @attr.add_to(@proxy)
18
+ end
19
+
20
+ it "should convert names to symbols" do
21
+ Factory::Attribute::Callback.new('name', nil).name.should == :name
22
+ end
23
+ end
@@ -27,6 +27,10 @@ describe Factory do
27
27
  Factory.define(@name) {|f| }
28
28
  @factory.should == Factory.factories[@name]
29
29
  end
30
+
31
+ it "should allow that factory to be found by name" do
32
+ Factory.factory_by_name(@name).should == @factory
33
+ end
30
34
  end
31
35
 
32
36
  describe "a factory" do
@@ -90,6 +94,38 @@ describe Factory do
90
94
  end
91
95
  end
92
96
 
97
+ describe "adding a callback" do
98
+ it "should add a callback attribute when the after_build attribute is defined" do
99
+ mock(Factory::Attribute::Callback).new(:after_build, is_a(Proc)) { 'after_build callback' }
100
+ @factory.after_build {}
101
+ @factory.attributes.should include('after_build callback')
102
+ end
103
+
104
+ it "should add a callback attribute when the after_create attribute is defined" do
105
+ mock(Factory::Attribute::Callback).new(:after_create, is_a(Proc)) { 'after_create callback' }
106
+ @factory.after_create {}
107
+ @factory.attributes.should include('after_create callback')
108
+ end
109
+
110
+ it "should add a callback attribute when the after_stub attribute is defined" do
111
+ mock(Factory::Attribute::Callback).new(:after_stub, is_a(Proc)) { 'after_stub callback' }
112
+ @factory.after_stub {}
113
+ @factory.attributes.should include('after_stub callback')
114
+ end
115
+
116
+ it "should add a callback attribute when defining a callback" do
117
+ mock(Factory::Attribute::Callback).new(:after_create, is_a(Proc)) { 'after_create callback' }
118
+ @factory.callback(:after_create) {}
119
+ @factory.attributes.should include('after_create callback')
120
+ end
121
+
122
+ it "should raise an InvalidCallbackNameError when defining a callback with an invalid name" do
123
+ lambda{
124
+ @factory.callback(:invalid_callback_name) {}
125
+ }.should raise_error(Factory::InvalidCallbackNameError)
126
+ end
127
+ end
128
+
93
129
  describe "after adding an attribute" do
94
130
  before do
95
131
  @attribute = "attribute"
@@ -130,6 +166,16 @@ describe Factory do
130
166
  factory.attributes.should include(attr)
131
167
  end
132
168
 
169
+ it "should return associations" do
170
+ factory = Factory.new(:post)
171
+ factory.association(:author)
172
+ factory.association(:editor)
173
+ factory.associations.each do |association|
174
+ association.should be_a(Factory::Attribute::Association)
175
+ end
176
+ factory.associations.size.should == 2
177
+ end
178
+
133
179
  it "should add an association with overrides" do
134
180
  factory = Factory.new(:post)
135
181
  name = :user
@@ -172,6 +218,21 @@ describe Factory do
172
218
  @factory.attributes.should include(attribute)
173
219
  end
174
220
 
221
+ it "should allow human_name as a static attribute name" do
222
+ attribute = 'attribute'
223
+ stub(attribute).name { :name }
224
+ mock(Factory::Attribute::Static).new(:human_name, 'value') { attribute}
225
+ @factory.human_name 'value'
226
+ end
227
+
228
+ it "should allow human_name as a dynamic attribute name" do
229
+ attribute = 'attribute'
230
+ stub(attribute).name { :name }
231
+ block = lambda {}
232
+ mock(Factory::Attribute::Dynamic).new(:human_name, block) { attribute }
233
+ @factory.human_name(&block)
234
+ end
235
+
175
236
  describe "when overriding generated attributes with a hash" do
176
237
  before do
177
238
  @attr = :name
@@ -397,6 +458,20 @@ describe Factory do
397
458
  child.attributes.size.should == 1
398
459
  child.attributes.first.should be_kind_of(Factory::Attribute::Dynamic)
399
460
  end
461
+
462
+ it "inherit all callbacks" do
463
+ Factory.define(:child, :parent => :object) do |f|
464
+ f.after_stub {|o| o.name = 'Stubby' }
465
+ end
466
+
467
+ grandchild = Factory.define(:grandchild, :parent => :child) do |f|
468
+ f.after_stub {|o| o.name = "#{o.name} McStubby" }
469
+ end
470
+
471
+ grandchild.attributes.size.should == 3
472
+ grandchild.attributes.first.should be_kind_of(Factory::Attribute::Callback)
473
+ grandchild.attributes[1].should be_kind_of(Factory::Attribute::Callback)
474
+ end
400
475
  end
401
476
 
402
477
  describe 'defining a factory with a default strategy parameter' do
@@ -487,4 +562,10 @@ describe Factory do
487
562
  it { should require_definitions_from("#{dir}/factories/person_factory.rb") }
488
563
  end
489
564
  end
565
+
566
+ it "should return the factory name without underscores for the human name" do
567
+ factory = Factory.new(:name_with_underscores)
568
+ factory.human_name.should == 'name with underscores'
569
+ end
570
+
490
571
  end
@@ -45,6 +45,14 @@ describe Factory::Proxy::Build do
45
45
  @proxy.result.should == @instance
46
46
  end
47
47
 
48
+ it "should run the :after_build callback when retrieving the result" do
49
+ spy = Object.new
50
+ stub(spy).foo
51
+ @proxy.add_callback(:after_build, proc{ spy.foo })
52
+ @proxy.result
53
+ spy.should have_received.foo
54
+ end
55
+
48
56
  describe "when setting an attribute" do
49
57
  before do
50
58
  stub(@instance).attribute = 'value'
@@ -44,6 +44,12 @@ describe Factory::Proxy::Create do
44
44
 
45
45
  describe "when asked for the result" do
46
46
  before do
47
+ @build_spy = Object.new
48
+ @create_spy = Object.new
49
+ stub(@build_spy).foo
50
+ stub(@create_spy).foo
51
+ @proxy.add_callback(:after_build, proc{ @build_spy.foo })
52
+ @proxy.add_callback(:after_create, proc{ @create_spy.foo })
47
53
  @result = @proxy.result
48
54
  end
49
55
 
@@ -54,6 +60,11 @@ describe Factory::Proxy::Create do
54
60
  it "should return the built instance" do
55
61
  @result.should == @instance
56
62
  end
63
+
64
+ it "should run both the build and the create callbacks" do
65
+ @build_spy.should have_received.foo
66
+ @create_spy.should have_received.foo
67
+ end
57
68
  end
58
69
 
59
70
  describe "when setting an attribute" do
@@ -45,8 +45,18 @@ describe Factory::Proxy::Stub do
45
45
  @stub.association(:user).should == @user
46
46
  end
47
47
 
48
- it "should return the actual instance when asked for the result" do
49
- @stub.result.should == @instance
48
+ describe "when asked for the result" do
49
+ it "should return the actual instance" do
50
+ @stub.result.should == @instance
51
+ end
52
+
53
+ it "should run the :after_stub callback" do
54
+ @spy = Object.new
55
+ stub(@spy).foo
56
+ @stub.add_callback(:after_stub, proc{ @spy.foo })
57
+ @stub.result
58
+ @spy.should have_received.foo
59
+ end
50
60
  end
51
61
  end
52
62
 
@@ -25,4 +25,60 @@ describe Factory::Proxy do
25
25
  it "should raise an error when asked for the result" do
26
26
  lambda { @proxy.result }.should raise_error(NotImplementedError)
27
27
  end
28
+
29
+ describe "when adding callbacks" do
30
+ before do
31
+ @first_block = proc{ 'block 1' }
32
+ @second_block = proc{ 'block 2' }
33
+ end
34
+ it "should add a callback" do
35
+ @proxy.add_callback(:after_create, @first_block)
36
+ @proxy.callbacks[:after_create].should be_eql([@first_block])
37
+ end
38
+
39
+ it "should add multiple callbacks of the same name" do
40
+ @proxy.add_callback(:after_create, @first_block)
41
+ @proxy.add_callback(:after_create, @second_block)
42
+ @proxy.callbacks[:after_create].should be_eql([@first_block, @second_block])
43
+ end
44
+
45
+ it "should add multiple callbacks of different names" do
46
+ @proxy.add_callback(:after_create, @first_block)
47
+ @proxy.add_callback(:after_build, @second_block)
48
+ @proxy.callbacks[:after_create].should be_eql([@first_block])
49
+ @proxy.callbacks[:after_build].should be_eql([@second_block])
50
+ end
51
+ end
52
+
53
+ describe "when running callbacks" do
54
+ before do
55
+ @first_spy = Object.new
56
+ @second_spy = Object.new
57
+ stub(@first_spy).foo
58
+ stub(@second_spy).foo
59
+ end
60
+
61
+ it "should run all callbacks with a given name" do
62
+ @proxy.add_callback(:after_create, proc{ @first_spy.foo })
63
+ @proxy.add_callback(:after_create, proc{ @second_spy.foo })
64
+ @proxy.run_callbacks(:after_create)
65
+ @first_spy.should have_received.foo
66
+ @second_spy.should have_received.foo
67
+ end
68
+
69
+ it "should only run callbacks with a given name" do
70
+ @proxy.add_callback(:after_create, proc{ @first_spy.foo })
71
+ @proxy.add_callback(:after_build, proc{ @second_spy.foo })
72
+ @proxy.run_callbacks(:after_create)
73
+ @first_spy.should have_received.foo
74
+ @second_spy.should_not have_received.foo
75
+ end
76
+
77
+ it "should pass in the instance if the block takes an argument" do
78
+ @proxy.instance_variable_set("@instance", @first_spy)
79
+ @proxy.add_callback(:after_create, proc{|spy| spy.foo })
80
+ @proxy.run_callbacks(:after_create)
81
+ @first_spy.should have_received.foo
82
+ end
83
+ end
28
84
  end
@@ -31,6 +31,21 @@ describe "integration" do
31
31
  f.username 'GuestUser'
32
32
  end
33
33
 
34
+ Factory.define :user_with_callbacks, :parent => :user do |f|
35
+ f.after_stub {|u| u.first_name = 'Stubby' }
36
+ f.after_build {|u| u.first_name = 'Buildy' }
37
+ f.after_create {|u| u.last_name = 'Createy' }
38
+ end
39
+
40
+ Factory.define :user_with_inherited_callbacks, :parent => :user_with_callbacks do |f|
41
+ f.callback(:after_stub) {|u| u.last_name = 'Double-Stubby' }
42
+ end
43
+
44
+ Factory.define :business do |f|
45
+ f.name 'Supplier of Awesome'
46
+ f.association :owner, :factory => :user
47
+ end
48
+
34
49
  Factory.sequence :email do |n|
35
50
  "somebody#{n}@example.com"
36
51
  end
@@ -262,4 +277,28 @@ describe "integration" do
262
277
  Factory(:sequence_abuser)
263
278
  }.should raise_error(Factory::SequenceAbuseError)
264
279
  end
280
+
281
+ describe "an instance with callbacks" do
282
+ it "should run the after_stub callback when stubbing" do
283
+ @user = Factory.stub(:user_with_callbacks)
284
+ @user.first_name.should == 'Stubby'
285
+ end
286
+
287
+ it "should run the after_build callback when building" do
288
+ @user = Factory.build(:user_with_callbacks)
289
+ @user.first_name.should == 'Buildy'
290
+ end
291
+
292
+ it "should run both the after_build and after_create callbacks when creating" do
293
+ @user = Factory(:user_with_callbacks)
294
+ @user.first_name.should == 'Buildy'
295
+ @user.last_name.should == 'Createy'
296
+ end
297
+
298
+ it "should run both the after_stub callback on the factory and the inherited after_stub callback" do
299
+ @user = Factory.stub(:user_with_inherited_callbacks)
300
+ @user.first_name.should == 'Stubby'
301
+ @user.last_name.should == 'Double-Stubby'
302
+ end
303
+ end
265
304
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_girl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Ferris
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-15 00:00:00 -04:00
12
+ date: 2009-10-16 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -32,6 +32,7 @@ files:
32
32
  - README.rdoc
33
33
  - lib/factory_girl/aliases.rb
34
34
  - lib/factory_girl/attribute/association.rb
35
+ - lib/factory_girl/attribute/callback.rb
35
36
  - lib/factory_girl/attribute/dynamic.rb
36
37
  - lib/factory_girl/attribute/static.rb
37
38
  - lib/factory_girl/attribute.rb
@@ -42,6 +43,7 @@ files:
42
43
  - lib/factory_girl/proxy/stub.rb
43
44
  - lib/factory_girl/proxy.rb
44
45
  - lib/factory_girl/sequence.rb
46
+ - lib/factory_girl/step_definitions.rb
45
47
  - lib/factory_girl/syntax/blueprint.rb
46
48
  - lib/factory_girl/syntax/generate.rb
47
49
  - lib/factory_girl/syntax/make.rb
@@ -50,6 +52,7 @@ files:
50
52
  - lib/factory_girl.rb
51
53
  - spec/factory_girl/aliases_spec.rb
52
54
  - spec/factory_girl/attribute/association_spec.rb
55
+ - spec/factory_girl/attribute/callback_spec.rb
53
56
  - spec/factory_girl/attribute/dynamic_spec.rb
54
57
  - spec/factory_girl/attribute/static_spec.rb
55
58
  - spec/factory_girl/attribute_spec.rb
@@ -100,6 +103,7 @@ summary: factory_girl provides a framework and DSL for defining and using model
100
103
  test_files:
101
104
  - spec/factory_girl/aliases_spec.rb
102
105
  - spec/factory_girl/attribute/association_spec.rb
106
+ - spec/factory_girl/attribute/callback_spec.rb
103
107
  - spec/factory_girl/attribute/dynamic_spec.rb
104
108
  - spec/factory_girl/attribute/static_spec.rb
105
109
  - spec/factory_girl/attribute_spec.rb