提交 1a0c58b2 编写于 作者: P Prem Sichanugrist

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.
上级 176b57c5
......@@ -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:
......
......@@ -9,7 +9,10 @@ class << self
# 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 @@ def start(files, options)
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 @@ def parse_arguments(arguments)
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 @@ def parse_arguments(arguments)
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
......
......@@ -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...
......
require 'isolation/abstract_unit'
require 'active_support/core_ext/string/strip'
module ApplicationTests
class TestRunnerTest < ActiveSupport::TestCase
......@@ -170,11 +171,61 @@ def test_sanae
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册