提交 73f887af 编写于 作者: K Kasper Timm Hansen 提交者: GitHub

Merge pull request #29271 from rails/unlock-minitest

Unlock minitest for Rails' test suite
......@@ -97,8 +97,7 @@ local_gemfile = File.expand_path(".Gemfile", __dir__)
instance_eval File.read local_gemfile if File.exist? local_gemfile
group :test do
# FIX: Our test suite isn't ready to run in random order yet.
gem "minitest", "< 5.3.4"
gem "minitest-bisect"
platforms :mri do
gem "stackprof"
......
......@@ -237,7 +237,12 @@ GEM
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_portile2 (2.2.0)
minitest (5.3.3)
minitest (5.10.2)
minitest-bisect (1.4.0)
minitest-server (~> 1.0)
path_expander (~> 1.0)
minitest-server (1.0.4)
minitest (~> 5.0)
mocha (0.14.0)
metaclass (~> 0.0.1)
mono_logger (1.1.0)
......@@ -261,6 +266,7 @@ GEM
parallel (1.11.2)
parser (2.4.0.0)
ast (~> 2.2)
path_expander (1.0.1)
pg (0.19.0)
pg (0.19.0-x64-mingw32)
pg (0.19.0-x86-mingw32)
......@@ -425,7 +431,7 @@ DEPENDENCIES
kindlerb (~> 1.2.0)
libxml-ruby
listen (>= 3.0.5, < 3.2)
minitest (< 5.3.4)
minitest-bisect
mocha (~> 0.14)
mysql2 (>= 0.4.4)
nokogiri (>= 1.6.8)
......
......@@ -981,8 +981,7 @@ def welcome
test "has access to params" do
params = { name: "World" }
assert_called_with(BaseMailer, :welcome, [params]) do
BaseMailerPreview.call(:welcome, params)
end
message = BaseMailerPreview.call(:welcome, params)
assert_equal "World", message["name"].decoded
end
end
......@@ -158,26 +158,6 @@ class << @connection
end
end
# test resetting sequences in odd tables in PostgreSQL
if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
require "models/movie"
require "models/subscriber"
def test_reset_empty_table_with_custom_pk
Movie.delete_all
Movie.connection.reset_pk_sequence! "movies"
assert_equal 1, Movie.create(name: "fight club").id
end
def test_reset_table_with_non_integer_pk
Subscriber.delete_all
Subscriber.connection.reset_pk_sequence! "subscribers"
sub = Subscriber.new(name: "robert drake")
sub.id = "bob drake"
assert_nothing_raised { sub.save! }
end
end
def test_uniqueness_violations_are_translated_to_specific_exception
@connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
error = assert_raises(ActiveRecord::RecordNotUnique) do
......@@ -368,5 +348,25 @@ def setup
assert !@connection.transaction_open?
end
end
# test resetting sequences in odd tables in PostgreSQL
if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
require "models/movie"
require "models/subscriber"
def test_reset_empty_table_with_custom_pk
Movie.delete_all
Movie.connection.reset_pk_sequence! "movies"
assert_equal 1, Movie.create(name: "fight club").id
end
def test_reset_table_with_non_integer_pk
Subscriber.delete_all
Subscriber.connection.reset_pk_sequence! "subscribers"
sub = Subscriber.new(name: "robert drake")
sub.id = "bob drake"
assert_nothing_raised { sub.save! }
end
end
end
end
......@@ -3,6 +3,8 @@
require "cases/helper"
class SchemaMigrationsTest < ActiveRecord::Mysql2TestCase
self.use_transactional_tests = false
def test_renaming_index_on_foreign_key
connection.add_index "engines", "car_id"
connection.add_foreign_key :engines, :cars, name: "fk_engines_cars"
......@@ -33,6 +35,8 @@ def test_initializes_internal_metadata_for_encoding_utf8mb4
assert connection.column_exists?(table_name, :key, :string)
end
ensure
ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Migrator.current_environment
end
private
......
......@@ -21,12 +21,7 @@ def to_unsafe_h
def setup
@connection = ActiveRecord::Base.connection
unless @connection.extension_enabled?("hstore")
@connection.enable_extension "hstore"
@connection.commit_db_transaction
end
@connection.reconnect!
enable_extension!("hstore", @connection)
@connection.transaction do
@connection.create_table("hstores") do |t|
......@@ -42,6 +37,7 @@ def setup
teardown do
@connection.drop_table "hstores", if_exists: true
disable_extension!("hstore", @connection)
end
def test_hstore_included_in_extensions
......
......@@ -327,15 +327,18 @@ def test_reload_type_map_for_newly_defined_types
end
def test_only_reload_type_map_once_for_every_unrecognized_type
reset_connection
connection = ActiveRecord::Base.connection
silence_warnings do
assert_queries 2, ignore_none: true do
@connection.select_all "select 'pg_catalog.pg_class'::regclass"
connection.select_all "select 'pg_catalog.pg_class'::regclass"
end
assert_queries 1, ignore_none: true do
@connection.select_all "select 'pg_catalog.pg_class'::regclass"
connection.select_all "select 'pg_catalog.pg_class'::regclass"
end
assert_queries 2, ignore_none: true do
@connection.select_all "SELECT NULL::anyarray"
connection.select_all "SELECT NULL::anyarray"
end
end
ensure
......@@ -343,10 +346,13 @@ def test_only_reload_type_map_once_for_every_unrecognized_type
end
def test_only_warn_on_first_encounter_of_unrecognized_oid
reset_connection
connection = ActiveRecord::Base.connection
warning = capture(:stderr) {
@connection.select_all "select 'pg_catalog.pg_class'::regclass"
@connection.select_all "select 'pg_catalog.pg_class'::regclass"
@connection.select_all "select 'pg_catalog.pg_class'::regclass"
connection.select_all "select 'pg_catalog.pg_class'::regclass"
connection.select_all "select 'pg_catalog.pg_class'::regclass"
connection.select_all "select 'pg_catalog.pg_class'::regclass"
}
assert_match(/\Aunknown OID \d+: failed to recognize type of 'regclass'\. It will be treated as String\.\n\z/, warning)
ensure
......
......@@ -465,7 +465,10 @@ def test_finder_bang_method_with_dirty_target
end
def test_create_resets_cached_counters
Reader.delete_all
person = Person.create!(first_name: "tenderlove")
post = Post.first
assert_equal [], person.readers
......
......@@ -1372,7 +1372,7 @@ def test_should_automatically_save_the_associated_models
@pirate.send(@association_name).each_with_index { |child, i| child.name = new_names[i] }
@pirate.save
assert_equal new_names, @pirate.reload.send(@association_name).map(&:name)
assert_equal new_names.sort, @pirate.reload.send(@association_name).map(&:name).sort
end
def test_should_automatically_save_bang_the_associated_models
......@@ -1380,7 +1380,7 @@ def test_should_automatically_save_bang_the_associated_models
@pirate.send(@association_name).each_with_index { |child, i| child.name = new_names[i] }
@pirate.save!
assert_equal new_names, @pirate.reload.send(@association_name).map(&:name)
assert_equal new_names.sort, @pirate.reload.send(@association_name).map(&:name).sort
end
def test_should_update_children_when_autosave_is_true_and_parent_is_new_but_child_is_not
......
......@@ -747,21 +747,27 @@ def test_pluck_joined_with_polymorphic_relation
end
def test_pluck_loaded_relation
Company.attribute_names # Load schema information so we don't query below
companies = Company.order(:id).limit(3).load
assert_no_queries do
assert_equal ["37signals", "Summit", "Microsoft"], companies.pluck(:name)
end
end
def test_pluck_loaded_relation_multiple_columns
Company.attribute_names # Load schema information so we don't query below
companies = Company.order(:id).limit(3).load
assert_no_queries do
assert_equal [[1, "37signals"], [2, "Summit"], [3, "Microsoft"]], companies.pluck(:id, :name)
end
end
def test_pluck_loaded_relation_sql_fragment
Company.attribute_names # Load schema information so we don't query below
companies = Company.order(:name).limit(3).load
assert_queries 1 do
assert_equal ["37signals", "Apex", "Ex Nihilo"], companies.pluck("DISTINCT name")
end
......
# frozen_string_literal: true
require "cases/helper"
require "support/connection_helper"
if current_adapter?(:Mysql2Adapter)
module ActiveRecord
module ConnectionAdapters
class MysqlTypeLookupTest < ActiveRecord::TestCase
include ConnectionHelper
setup do
@connection = ActiveRecord::Base.connection
end
def teardown
reset_connection
end
def test_boolean_types
emulate_booleans(true) do
assert_lookup_type :boolean, "tinyint(1)"
......
......@@ -397,6 +397,7 @@ def load_has_and_belongs_to_many
class FixturesResetPkSequenceTest < ActiveRecord::TestCase
fixtures :accounts
fixtures :companies
self.use_transactional_tests = false
def setup
@instances = [Account.new(credit_limit: 50), Company.new(name: "RoR Consulting"), Course.new(name: "Test")]
......@@ -841,6 +842,8 @@ def test_cache
end
class FoxyFixturesTest < ActiveRecord::TestCase
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
self.use_transactional_tests = false
fixtures :parrots, :parrots_pirates, :pirates, :treasures, :mateys, :ships, :computers,
:developers, :"admin/accounts", :"admin/users", :live_parrots, :dead_parrots, :books
......
......@@ -143,6 +143,8 @@ def load_schema
if File.exist?(adapter_specific_schema_file)
load adapter_specific_schema_file
end
ActiveRecord::FixtureSet.reset_cache
ensure
$stdout = original_stdout
end
......
......@@ -1002,33 +1002,19 @@ def test_reload_via_querycache
end
class SaveTest < ActiveRecord::TestCase
self.use_transactional_tests = false
def test_save_touch_false
widget = Class.new(ActiveRecord::Base) do
connection.create_table :widgets, force: true do |t|
t.string :name
t.timestamps null: false
end
self.table_name = :widgets
end
instance = widget.create!(
pet = Pet.create!(
name: "Bob",
created_at: 1.day.ago,
updated_at: 1.day.ago)
created_at = instance.created_at
updated_at = instance.updated_at
created_at = pet.created_at
updated_at = pet.updated_at
instance.name = "Barb"
instance.save!(touch: false)
assert_equal instance.created_at, created_at
assert_equal instance.updated_at, updated_at
ensure
ActiveRecord::Base.connection.drop_table widget.table_name
widget.reset_column_information
pet.name = "Barb"
pet.save!(touch: false)
assert_equal pet.created_at, created_at
assert_equal pet.updated_at, updated_at
end
end
......
......@@ -326,7 +326,7 @@ class CompositePrimaryKeyTest < ActiveRecord::TestCase
def setup
@connection = ActiveRecord::Base.connection
@connection.schema_cache.clear!
@connection.create_table(:barcodes, primary_key: ["region", "code"], force: true) do |t|
@connection.create_table(:uber_barcodes, primary_key: ["region", "code"], force: true) do |t|
t.string :region
t.integer :code
end
......@@ -337,11 +337,11 @@ def setup
end
def teardown
@connection.drop_table(:barcodes, if_exists: true)
@connection.drop_table(:uber_barcodes, if_exists: true)
end
def test_composite_primary_key
assert_equal ["region", "code"], @connection.primary_keys("barcodes")
assert_equal ["region", "code"], @connection.primary_keys("uber_barcodes")
end
def test_composite_primary_key_out_of_order
......@@ -352,7 +352,7 @@ def test_composite_primary_key_out_of_order
def test_primary_key_issues_warning
model = Class.new(ActiveRecord::Base) do
def self.table_name
"barcodes"
"uber_barcodes"
end
end
warning = capture(:stderr) do
......@@ -361,9 +361,9 @@ def self.table_name
assert_match(/WARNING: Active Record does not support composite primary key\./, warning)
end
def test_dumping_composite_primary_key
schema = dump_table_schema "barcodes"
assert_match %r{create_table "barcodes", primary_key: \["region", "code"\]}, schema
def test_collectly_dump_composite_primary_key
schema = dump_table_schema "uber_barcodes"
assert_match %r{create_table "uber_barcodes", primary_key: \["region", "code"\]}, schema
end
def test_dumping_composite_primary_key_out_of_order
......
......@@ -133,7 +133,7 @@ def test_query_cache_across_threads
assert_cache :off, conn
end
ensure
ActiveRecord::Base.clear_all_connections!
ActiveRecord::Base.connection_pool.disconnect!
end
end
end
......
......@@ -5,6 +5,8 @@
require "models/pet"
class ReloadModelsTest < ActiveRecord::TestCase
include ActiveSupport::Testing::Isolation
fixtures :pets, :owners
def test_has_one_with_reload
......@@ -21,4 +23,4 @@ def test_has_one_with_reload
pet.owner = Owner.find_by_name("ashley")
assert_equal pet.owner, Owner.find_by_name("ashley")
end
end
end unless in_memory_db?
......@@ -521,6 +521,8 @@ def test_default_scoping_with_threads
end
def test_default_scope_is_threadsafe
2.times { ThreadsafeDeveloper.unscoped.create! }
threads = []
assert_not_equal 1, ThreadsafeDeveloper.unscoped.count
......@@ -539,5 +541,7 @@ def test_default_scope_is_threadsafe
ThreadsafeDeveloper.connection.close
end
threads.each(&:join)
ensure
ThreadsafeDeveloper.unscoped.destroy_all
end
end unless in_memory_db?
......@@ -30,7 +30,14 @@ def intro
end
end
setup { Current.reset }
setup do
@original_time_zone = Time.zone
Current.reset
end
teardown do
Time.zone = @original_time_zone
end
test "read and write attribute" do
Current.world = "world/1"
......
......@@ -515,7 +515,7 @@ def test_only_inline_failure_output
create_test_file :models, "post", pass: false
output = run_test_command("test/models/post_test.rb")
assert_match %r{Finished in.*\n\n1 runs, 1 assertions}, output
assert_match %r{Finished in.*\n1 runs, 1 assertions}, output
end
def test_fail_fast
......
......@@ -55,7 +55,7 @@ def test_truth
end
RUBY
assert_unsuccessful_run "unit/foo_test.rb", "Failed assertion"
assert_unsuccessful_run "unit/foo_test.rb", "Failure:\nFooTest#test_truth"
end
test "integration test" do
......
......@@ -71,7 +71,7 @@ def test_only_inline_failure_output
create_test_file "post", pass: false
output = run_test_command("test/post_test.rb")
assert_match %r{Finished in.*\n\n1 runs, 1 assertions}, output
assert_match %r{Finished in.*\n1 runs, 1 assertions}, output
end
def test_fail_fast
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册