mirror of
https://github.com/thoughtbot/factory_bot.git
synced 2022-11-09 11:43:51 -05:00
Requiring factory definition files now works in 1.9 outside of tests
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.
This commit is contained in:
parent
a51b97010d
commit
c47affb1aa
4 changed files with 52 additions and 12 deletions
30
features/find_definitions.feature
Normal file
30
features/find_definitions.feature
Normal file
|
@ -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
features/step_definitions/factory_girl_steps.rb
Normal file
10
features/step_definitions/factory_girl_steps.rb
Normal file
|
@ -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
|
|
@ -11,11 +11,11 @@ module FactoryGirl
|
|||
|
||||
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
|
||||
|
|
|
@ -47,7 +47,7 @@ describe "definition loading" do
|
|||
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
|
||||
|
||||
|
@ -55,14 +55,14 @@ describe "definition loading" do
|
|||
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
|
||||
|
||||
|
@ -70,8 +70,8 @@ describe "definition loading" 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
|
||||
|
||||
|
@ -91,9 +91,9 @@ describe "definition loading" do
|
|||
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
|
||||
|
||||
|
@ -101,8 +101,8 @@ describe "definition loading" 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
|
||||
|
|
Loading…
Reference in a new issue