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

Merge pull request #21279 from ronakjangir47/test_cleanup

Cleaned up generators tests using internal assertion helper
This commit is contained in:
Kasper Timm Hansen 2015-08-20 07:37:59 +02:00
commit c83b117d4b
5 changed files with 30 additions and 45 deletions

View file

@ -1,11 +1,13 @@
require 'minitest/mock'
module ActiveSupport
module Testing
module MethodCallAssertions # :nodoc:
private
def assert_called(object, method_name, message = nil, times: 1)
def assert_called(object, method_name, message = nil, times: 1, returns: nil)
times_called = 0
object.stub(method_name, proc { times_called += 1 }) { yield }
object.stub(method_name, proc { times_called += 1; returns }) { yield }
error = "Expected #{method_name} to be called #{times} times, " \
"but was called #{times_called} times"

View file

@ -33,6 +33,12 @@ class MethodCallAssertionsTest < ActiveSupport::TestCase
end
end
def test_assert_called_returns
assert_called(@object, :increment, returns: 10) do
assert_equal 10, @object.increment
end
end
def test_assert_called_failure
error = assert_raises(Minitest::Assertion) do
assert_called(@object, :increment) do

View file

@ -1,7 +1,6 @@
require 'generators/generators_test_helper'
require 'rails/generators/rails/app/app_generator'
require 'env_helpers'
require 'minitest/mock'
class ActionsTest < Rails::Generators::TestCase
include GeneratorsTestHelper
@ -12,13 +11,11 @@ class ActionsTest < Rails::Generators::TestCase
def setup
Rails.application = TestApp::Application
@mock_generator = Minitest::Mock.new
super
end
def teardown
Rails.application = TestApp::Application.instance
@mock_generator.verify
end
def test_invoke_other_generator_with_shortcut
@ -150,16 +147,13 @@ class ActionsTest < Rails::Generators::TestCase
end
def test_git_with_symbol_should_run_command_using_git_scm
@mock_generator.expect(:call, nil, ['git init'])
generator.stub(:run, @mock_generator) do
assert_called_with(generator, :run, ['git init']) do
action :git, :init
end
end
def test_git_with_hash_should_run_each_command_using_git_scm
@mock_generator.expect(:call, nil, ["git rm README"])
@mock_generator.expect(:call, nil, ["git add ."])
generator.stub(:run, @mock_generator) do
assert_called_with(generator, :run, [ ["git rm README"], ["git add ."] ]) do
action :git, rm: 'README', add: '.'
end
end
@ -185,15 +179,13 @@ class ActionsTest < Rails::Generators::TestCase
end
def test_generate_should_run_script_generate_with_argument_and_options
@mock_generator.expect(:call, nil, ['bin/rails generate model MyModel', verbose: false])
generator.stub(:run_ruby_script, @mock_generator) do
assert_called_with(generator, :run_ruby_script, ['bin/rails generate model MyModel', verbose: false]) do
action :generate, 'model', 'MyModel'
end
end
def test_rake_should_run_rake_command_with_default_env
@mock_generator.expect(:call, nil, ["rake log:clear RAILS_ENV=development", verbose: false])
generator.stub(:run, @mock_generator) do
assert_called_with(generator, :run, ["rake log:clear RAILS_ENV=development", verbose: false]) do
with_rails_env nil do
action :rake, 'log:clear'
end
@ -201,15 +193,13 @@ class ActionsTest < Rails::Generators::TestCase
end
def test_rake_with_env_option_should_run_rake_command_in_env
@mock_generator.expect(:call, nil, ['rake log:clear RAILS_ENV=production', verbose: false])
generator.stub(:run, @mock_generator) do
assert_called_with(generator, :run, ['rake log:clear RAILS_ENV=production', verbose: false]) do
action :rake, 'log:clear', env: 'production'
end
end
def test_rake_with_rails_env_variable_should_run_rake_command_in_env
@mock_generator.expect(:call, nil, ['rake log:clear RAILS_ENV=production', verbose: false])
generator.stub(:run, @mock_generator) do
assert_called_with(generator, :run, ['rake log:clear RAILS_ENV=production', verbose: false]) do
with_rails_env "production" do
action :rake, 'log:clear'
end
@ -217,8 +207,7 @@ class ActionsTest < Rails::Generators::TestCase
end
def test_env_option_should_win_over_rails_env_variable_when_running_rake
@mock_generator.expect(:call, nil, ['rake log:clear RAILS_ENV=production', verbose: false])
generator.stub(:run, @mock_generator) do
assert_called_with(generator, :run, ['rake log:clear RAILS_ENV=production', verbose: false]) do
with_rails_env "staging" do
action :rake, 'log:clear', env: 'production'
end
@ -226,8 +215,7 @@ class ActionsTest < Rails::Generators::TestCase
end
def test_rake_with_sudo_option_should_run_rake_command_with_sudo
@mock_generator.expect(:call, nil, ["sudo rake log:clear RAILS_ENV=development", verbose: false])
generator.stub(:run, @mock_generator) do
assert_called_with(generator, :run, ["sudo rake log:clear RAILS_ENV=development", verbose: false]) do
with_rails_env nil do
action :rake, 'log:clear', sudo: true
end
@ -235,8 +223,7 @@ class ActionsTest < Rails::Generators::TestCase
end
def test_capify_should_run_the_capify_command
@mock_generator.expect(:call, nil, ['capify .', verbose: false])
generator.stub(:run, @mock_generator) do
assert_called_with(generator, :run, ['capify .', verbose: false]) do
action :capify!
end
end
@ -274,8 +261,7 @@ F
def test_readme
run_generator
2.times { @mock_generator.expect(:call, destination_root,[]) }
Rails::Generators::AppGenerator.stub(:source_root, @mock_generator) do
assert_called(Rails::Generators::AppGenerator, :source_root, times: 2, returns: destination_root) do
assert_match "application up and running", action(:readme, "README.md")
end
end
@ -283,8 +269,7 @@ F
def test_readme_with_quiet
generator(default_arguments, quiet: true)
run_generator
2.times { @mock_generator.expect(:call, destination_root,[]) }
Rails::Generators::AppGenerator.stub(:source_root, @mock_generator) do
assert_called(Rails::Generators::AppGenerator, :source_root, times: 2, returns: destination_root) do
assert_no_match "application up and running", action(:readme, "README.md")
end
end

View file

@ -1,6 +1,7 @@
require 'abstract_unit'
require 'active_support/core_ext/module/remove_method'
require 'active_support/testing/stream'
require 'active_support/testing/method_call_assertions'
require 'rails/generators'
require 'rails/generators/test_case'
@ -25,6 +26,7 @@ require 'action_view'
module GeneratorsTestHelper
include ActiveSupport::Testing::Stream
include ActiveSupport::Testing::MethodCallAssertions
def self.included(base)
base.class_eval do

View file

@ -1,7 +1,6 @@
require 'generators/generators_test_helper'
require 'rails/generators/rails/model/model_generator'
require 'rails/generators/test_unit/model/model_generator'
require 'minitest/mock'
class GeneratorsTest < Rails::Generators::TestCase
include GeneratorsTestHelper
@ -9,18 +8,15 @@ class GeneratorsTest < Rails::Generators::TestCase
def setup
@path = File.expand_path("lib", Rails.root)
$LOAD_PATH.unshift(@path)
@mock_generator = MiniTest::Mock.new
end
def teardown
$LOAD_PATH.delete(@path)
@mock_generator.verify
end
def test_simple_invoke
assert File.exist?(File.join(@path, 'generators', 'model_generator.rb'))
@mock_generator.expect(:call, nil, [["Account"],{}])
TestUnit::Generators::ModelGenerator.stub(:start, @mock_generator) do
assert_called_with(TestUnit::Generators::ModelGenerator, :start, [["Account"], {}]) do
Rails::Generators.invoke("test_unit:model", ["Account"])
end
end
@ -51,23 +47,20 @@ class GeneratorsTest < Rails::Generators::TestCase
def test_should_give_higher_preference_to_rails_generators
assert File.exist?(File.join(@path, 'generators', 'model_generator.rb'))
@mock_generator.expect(:call, nil, [["Account"],{}])
Rails::Generators::ModelGenerator.stub(:start, @mock_generator) do
assert_called_with(Rails::Generators::ModelGenerator, :start, [["Account"], {}]) do
warnings = capture(:stderr){ Rails::Generators.invoke :model, ["Account"] }
assert warnings.empty?
end
end
def test_invoke_with_default_values
@mock_generator.expect(:call, nil, [["Account"],{}])
Rails::Generators::ModelGenerator.stub(:start, @mock_generator) do
assert_called_with(Rails::Generators::ModelGenerator, :start, [["Account"], {}]) do
Rails::Generators.invoke :model, ["Account"]
end
end
def test_invoke_with_config_values
@mock_generator.expect(:call, nil, [["Account"],{behavior: :skip}])
Rails::Generators::ModelGenerator.stub(:start, @mock_generator) do
assert_called_with(Rails::Generators::ModelGenerator, :start, [["Account"], behavior: :skip]) do
Rails::Generators.invoke :model, ["Account"], behavior: :skip
end
end
@ -115,8 +108,7 @@ class GeneratorsTest < Rails::Generators::TestCase
def test_invoke_with_nested_namespaces
model_generator = Minitest::Mock.new
model_generator.expect(:start, nil, [["Account"], {}])
@mock_generator.expect(:call, model_generator, ['namespace', 'my:awesome'])
Rails::Generators.stub(:find_by_namespace, @mock_generator) do
assert_called_with(Rails::Generators, :find_by_namespace, ['namespace', 'my:awesome'], returns: model_generator) do
Rails::Generators.invoke 'my:awesome:namespace', ["Account"]
end
model_generator.verify
@ -185,8 +177,7 @@ class GeneratorsTest < Rails::Generators::TestCase
def test_fallbacks_for_generators_on_invoke
Rails::Generators.fallbacks[:shoulda] = :test_unit
@mock_generator.expect(:call, nil, [["Account"],{}])
TestUnit::Generators::ModelGenerator.stub(:start, @mock_generator) do
assert_called_with(TestUnit::Generators::ModelGenerator, :start, [["Account"], {}]) do
Rails::Generators.invoke "shoulda:model", ["Account"]
end
ensure
@ -196,8 +187,7 @@ class GeneratorsTest < Rails::Generators::TestCase
def test_nested_fallbacks_for_generators
Rails::Generators.fallbacks[:shoulda] = :test_unit
Rails::Generators.fallbacks[:super_shoulda] = :shoulda
@mock_generator.expect(:call, nil, [["Account"],{}])
TestUnit::Generators::ModelGenerator.stub(:start, @mock_generator) do
assert_called_with(TestUnit::Generators::ModelGenerator, :start, [["Account"], {}]) do
Rails::Generators.invoke "super_shoulda:model", ["Account"]
end
ensure