Skip to content

Commit

Permalink
Requiring factory definition files now works in 1.9 outside of tests
Browse files Browse the repository at this point in the history
Ruby 1.9 doesn't automatically include . in the load path; if we do a
require to a relative path (eg a file within spec or test), 1.9 will raise a
LoadError because spec or test isn't normally in the load path.
  • Loading branch information
joshuaclayton committed Jul 22, 2011
1 parent a51b970 commit c47affb
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 12 deletions.
30 changes: 30 additions & 0 deletions features/find_definitions.feature
@@ -0,0 +1,30 @@
Feature: Factory girl can find factory definitions correctly
Scenario: Find definitions with a path
Given a file named "awesome_factories.rb" with:
"""
FactoryGirl.define do
factory :awesome_category, :parent => :category do
name "awesome!!!"
end
end
"""
When "awesome_factories.rb" is added to Factory Girl's file definitions path
And I create a "awesome_category" instance from Factory Girl
Then I should find the following for the last category:
| name |
| awesome!!! |

Scenario: Find definitions with a folder
Given a file named "nested/great_factories.rb" with:
"""
FactoryGirl.define do
factory :great_category, :parent => :category do
name "great!!!"
end
end
"""
When "nested" is added to Factory Girl's file definitions path
And I create a "great_category" instance from Factory Girl
Then I should find the following for the last category:
| name |
| great!!! |
10 changes: 10 additions & 0 deletions features/step_definitions/factory_girl_steps.rb
@@ -0,0 +1,10 @@
When /^"([^"]*)" is added to Factory Girl's file definitions path$/ do |file_name|
new_factory_file = File.join(current_dir, file_name.gsub(".rb", ""))
FactoryGirl.definition_file_paths ||= []
FactoryGirl.definition_file_paths << new_factory_file
FactoryGirl.find_definitions
end

When /^I create a "([^"]*)" instance from Factory Girl$/ do |factory_name|
FactoryGirl.create(factory_name)
end
4 changes: 2 additions & 2 deletions lib/factory_girl/find_definitions.rb
Expand Up @@ -11,11 +11,11 @@ class << self

def self.find_definitions #:nodoc:
definition_file_paths.each do |path|
require("#{path}.rb") if File.exists?("#{path}.rb")
require("./#{path}.rb") if File.exists?("#{path}.rb")

if File.directory? path
Dir[File.join(path, '**', '*.rb')].sort.each do |file|
require file
require "./#{file}"
end
end
end
Expand Down
20 changes: 10 additions & 10 deletions spec/factory_girl/find_definitions_spec.rb
Expand Up @@ -47,31 +47,31 @@ def self.in_directory_with_files(*files)
describe "with factories.rb" do
in_directory_with_files 'factories.rb'
it_should_behave_like "finds definitions" do
it { should require_definitions_from('factories.rb') }
it { should require_definitions_from('./factories.rb') }
end
end

%w(spec test).each do |dir|
describe "with a factories file under #{dir}" do
in_directory_with_files File.join(dir, 'factories.rb')
it_should_behave_like "finds definitions" do
it { should require_definitions_from("#{dir}/factories.rb") }
it { should require_definitions_from("./#{dir}/factories.rb") }
end
end

describe "with a factories file under #{dir}/factories" do
in_directory_with_files File.join(dir, 'factories', 'post_factory.rb')
it_should_behave_like "finds definitions" do
it { should require_definitions_from("#{dir}/factories/post_factory.rb") }
it { should require_definitions_from("./#{dir}/factories/post_factory.rb") }
end
end

describe "with several factories files under #{dir}/factories" do
in_directory_with_files File.join(dir, 'factories', 'post_factory.rb'),
File.join(dir, 'factories', 'person_factory.rb')
it_should_behave_like "finds definitions" do
it { should require_definitions_from("#{dir}/factories/post_factory.rb") }
it { should require_definitions_from("#{dir}/factories/person_factory.rb") }
it { should require_definitions_from("./#{dir}/factories/post_factory.rb") }
it { should require_definitions_from("./#{dir}/factories/person_factory.rb") }
end
end

Expand All @@ -91,18 +91,18 @@ def self.in_directory_with_files(*files)
File.join(dir, 'factories', 'post_factory.rb'),
File.join(dir, 'factories', 'person_factory.rb')
it_should_behave_like "finds definitions" do
it { should require_definitions_from("#{dir}/factories.rb") }
it { should require_definitions_from("#{dir}/factories/post_factory.rb") }
it { should require_definitions_from("#{dir}/factories/person_factory.rb") }
it { should require_definitions_from("./#{dir}/factories.rb") }
it { should require_definitions_from("./#{dir}/factories/post_factory.rb") }
it { should require_definitions_from("./#{dir}/factories/person_factory.rb") }
end
end

describe "with deeply nested factory files under #{dir}" do
in_directory_with_files File.join(dir, 'factories', 'subdirectory', 'post_factory.rb'),
File.join(dir, 'factories', 'subdirectory', 'person_factory.rb')
it_should_behave_like "finds definitions" do
it { should require_definitions_from("#{dir}/factories/subdirectory/post_factory.rb") }
it { should require_definitions_from("#{dir}/factories/subdirectory/person_factory.rb") }
it { should require_definitions_from("./#{dir}/factories/subdirectory/post_factory.rb") }
it { should require_definitions_from("./#{dir}/factories/subdirectory/person_factory.rb") }
end
end
end
Expand Down

0 comments on commit c47affb

Please sign in to comment.