mirror of
https://github.com/thoughtbot/factory_bot.git
synced 2022-11-09 11:43:51 -05:00
Don't always find factory definitions, as that can be problematic (see http://groups.google.com/group/factory_girl/browse_thread/thread/a6e4d67974fa214?hl=en). Added init.rb to do rails specific factory loading. Factory.find_definition will also check subdirectories for definitions to load.
This commit is contained in:
parent
8ccf44fbd1
commit
5b7258706d
4 changed files with 66 additions and 18 deletions
8
init.rb
Normal file
8
init.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
config.after_initialize do
|
||||
require 'factory_girl'
|
||||
Factory.definition_file_paths = [
|
||||
File.join(RAILS_ROOT, 'test', 'factories'),
|
||||
File.join(RAILS_ROOT, 'spec', 'factories')
|
||||
]
|
||||
Factory.find_definitions
|
||||
end
|
|
@ -11,6 +11,4 @@ require 'factory_girl/aliases'
|
|||
# Factory(:user, :name => 'Joe')
|
||||
def Factory (name, attrs = {})
|
||||
Factory.create(name, attrs)
|
||||
end
|
||||
|
||||
Factory.find_definitions
|
||||
end
|
|
@ -182,10 +182,12 @@ class Factory
|
|||
|
||||
def find_definitions #:nodoc:
|
||||
definition_file_paths.each do |path|
|
||||
begin
|
||||
require(path)
|
||||
break
|
||||
rescue LoadError
|
||||
require("#{path}.rb") if File.exists?("#{path}.rb")
|
||||
|
||||
if File.directory? path
|
||||
Dir[File.join(path, '*.rb')].each do |file|
|
||||
require file
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -432,21 +432,61 @@ class FactoryTest < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
end
|
||||
|
||||
def self.context_in_directory_with_files(*files)
|
||||
context "in a directory with #{files.to_sentence}" do
|
||||
setup do
|
||||
@pwd = Dir.pwd
|
||||
@tmp_dir = File.join(File.dirname(__FILE__), 'tmp')
|
||||
FileUtils.mkdir_p @tmp_dir
|
||||
Dir.chdir(@tmp_dir)
|
||||
|
||||
files.each do |file|
|
||||
FileUtils.mkdir_p File.dirname(file)
|
||||
FileUtils.touch file
|
||||
Factory.stubs(:require).with(file)
|
||||
end
|
||||
end
|
||||
|
||||
teardown do
|
||||
Dir.chdir(@pwd)
|
||||
FileUtils.rm_rf(@tmp_dir)
|
||||
end
|
||||
|
||||
Factory.definition_file_paths.each do |file|
|
||||
should "automatically load definitions from #{file}.rb" do
|
||||
Factory.stubs(:require).raises(LoadError)
|
||||
yield
|
||||
end
|
||||
end
|
||||
|
||||
def self.should_require_definitions_from(file)
|
||||
should "load definitions from #{file}" do
|
||||
Factory.expects(:require).with(file)
|
||||
Factory.find_definitions
|
||||
end
|
||||
end
|
||||
|
||||
context_in_directory_with_files 'factories.rb' do
|
||||
should_require_definitions_from 'factories.rb'
|
||||
end
|
||||
|
||||
%w(spec test).each do |dir|
|
||||
context_in_directory_with_files File.join(dir, 'factories.rb') do
|
||||
should_require_definitions_from "#{dir}/factories.rb"
|
||||
end
|
||||
|
||||
context_in_directory_with_files File.join(dir, 'factories', 'post_factory.rb') do
|
||||
should_require_definitions_from "#{dir}/factories/post_factory.rb"
|
||||
end
|
||||
|
||||
context_in_directory_with_files File.join(dir, 'factories', 'post_factory.rb'), File.join(dir, 'factories', 'person_factory.rb') do
|
||||
should_require_definitions_from "#{dir}/factories/post_factory.rb"
|
||||
should_require_definitions_from "#{dir}/factories/person_factory.rb"
|
||||
end
|
||||
|
||||
context_in_directory_with_files File.join(dir, 'factories.rb'), File.join(dir, 'factories', 'post_factory.rb'), File.join(dir, 'factories', 'person_factory.rb') do
|
||||
should_require_definitions_from "#{dir}/factories.rb"
|
||||
should_require_definitions_from "#{dir}/factories/post_factory.rb"
|
||||
should_require_definitions_from "#{dir}/factories/person_factory.rb"
|
||||
end
|
||||
end
|
||||
|
||||
should "only load the first set of factories detected" do
|
||||
first, second, third = Factory.definition_file_paths
|
||||
Factory.expects(:require).with(first).raises(LoadError)
|
||||
Factory.expects(:require).with(second)
|
||||
Factory.expects(:require).with(third).never
|
||||
Factory.find_definitions
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue