1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Load fixtures only when running suites, or -f

* `rails test -f` will run the test suites with all fixtures loaded
* New application will now generated without `fixtures :all` line
  enabled by default.
This commit is contained in:
Prem Sichanugrist 2013-02-06 01:03:17 -05:00
parent 176b57c543
commit 1a0c58b298
4 changed files with 80 additions and 3 deletions

View file

@ -19,6 +19,14 @@
*Terence Lee*
* Rails now generate a `test/test_helper.rb` file with `fixtures :all` commented out by default,
since we don't want to force loading all fixtures for user when a single test is run. However,
fixtures are still going to be loaded automatically for test suites.
To force all fixtures to be create in your database, use `rails test -f` to run your test.
*Prem Sichanugrist*
* Add `rails test` command to run the test suite
To run the whole test suite:

View file

@ -9,7 +9,10 @@ module Rails
# of file to a new +TestRunner+ object, then invoke the evaluation. If
# the argument is not a test suite name, it will be treated as a file
# name and passed to the +TestRunner+ instance right away.
def start(files, options)
def start(files, options = {})
original_fixtures_options = options.delete(:fixtures)
options[:fixtures] = true
case files.first
when nil
new(Dir['test/**/*_test.rb'], options).run
@ -28,6 +31,7 @@ module Rails
when 'integration'
new(Dir['test/integration/**/*_test.rb'], options).run
else
options[:fixtures] = original_fixtures_options
new(files, options).run
end
end
@ -52,6 +56,10 @@ module Rails
exit
end
opts.on '-f', '--fixtures', 'Load fixtures in test/fixtures/ before running the tests' do
options[:fixtures] = true
end
opts.on '-s', '--seed SEED', Integer, "Sets random seed" do |m|
options[:seed] = m.to_i
end
@ -87,6 +95,15 @@ module Rails
def initialize(files, options)
@files = files
Rake::Task['test:prepare'].invoke
if options.delete(:fixtures)
if defined?(ActiveRecord::Base)
ActiveSupport::TestCase.send :include, ActiveRecord::TestFixtures
ActiveSupport::TestCase.fixture_path = "#{Rails.root}/test/fixtures/"
ActiveSupport::TestCase.fixtures :all
end
end
MiniTest::Unit.runner.options = options
MiniTest::Unit.output = SilentUntilSyncStream.new(MiniTest::Unit.output)
end

View file

@ -6,11 +6,12 @@ class ActiveSupport::TestCase
<% unless options[:skip_active_record] -%>
ActiveRecord::Migration.check_pending!
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
# Uncomment the `fixtures` line below to setup all fixtures in test/fixtures/*.yml for all tests
# in alphabetical order.
#
# Note: You'll currently still have to declare fixtures explicitly in integration tests
# -- they do not yet inherit this setting
fixtures :all
# fixtures :all
<% end -%>
# Add more helper methods to be used by all tests here...

View file

@ -1,4 +1,5 @@
require 'isolation/abstract_unit'
require 'active_support/core_ext/string/strip'
module ApplicationTests
class TestRunnerTest < ActiveSupport::TestCase
@ -170,11 +171,61 @@ module ApplicationTests
end
end
def test_not_load_fixtures_when_running_single_test
create_model_with_fixture
create_fixture_test :models, 'user'
assert_match /0 users/, run_test_command('test/models/user_test.rb')
assert_match /3 users/, run_test_command('test/models/user_test.rb -f')
end
def test_load_fixtures_when_running_test_suites
create_model_with_fixture
types = [:models, :helpers, [:units, :unit], :controllers, :mailers,
[:functionals, :functional], :integration]
types.each do |type, directory|
directory ||= type
create_fixture_test directory
assert_match /3 users/, run_test_command(type)
Dir.chdir(app_path) { FileUtils.rm_f "test/#{directory}" }
end
end
private
def run_test_command(arguments = 'test/unit/test_test.rb')
Dir.chdir(app_path) { `bundle exec rails test #{arguments}` }
end
def create_model_with_fixture
script 'generate model user name:string'
app_file 'test/fixtures/users.yml', <<-YAML.strip_heredoc
vampire:
id: 1
name: Koyomi Araragi
crab:
id: 2
name: Senjougahara Hitagi
cat:
id: 3
name: Tsubasa Hanekawa
YAML
Dir.chdir(app_path) { `bundle exec rake db:migrate` }
end
def create_fixture_test(path = :unit, name = 'test')
app_file "test/#{path}/#{name}_test.rb", <<-RUBY
require 'test_helper'
class #{name.camelize}Test < ActiveSupport::TestCase
def test_fixture
puts "\#{User.count} users (\#{__FILE__})"
end
end
RUBY
end
def create_schema
app_file 'db/schema.rb', ''
end