Тестирование Rails 2.3.8: как использовать мой метод для * каждого * утверждения? - PullRequest
0 голосов
/ 08 февраля 2011

У меня есть вспомогательный модуль, общий для всех тестов моего Rails 2.3.8 приложения.Помимо прочего, он предоставляет методы setup и teardown.При просмотре кода кажется, что я должен быть в состоянии определить метод с именем add_assertion, который будет вызываться _wrap_assertion (ищите def _wrap_assertion в Test :: Unit:: Утверждения 2.1.2 .) К сожалению, этого не происходит.

Устанавливая точку останова в методе setup в моем вспомогательном модуле, я могу убедиться, что Test::Unit::Assertionsв его родословной:

(rdb:1) self.class                    
RoutingTest                           
(rdb:1) self.class.ancestors          
[RoutingTest, CandlepinRequestHelper, ActionController::IntegrationTest, \
ActionController::Integration::Runner, ActiveSupport::TestCase, \
ActiveSupport::Testing::Deprecation, ActiveSupport::Testing::Assertions, \
ActiveSupport::Testing::SetupAndTeardown::ForClassicTestUnit, \
ActiveSupport::Callbacks, ActiveSupport::Testing::SetupAndTeardown, \
ActiveSupport::Testing::Default, Test::Unit::TestCase, \
Mocha::Integration::TestUnit::RubyVersion186AndAbove, Mocha::API, \
Mocha::ParameterMatchers, Test::Unit::Util::BacktraceFilter, \
Test::Unit::Assertions, Object, Mocha::ObjectMethods, Socket::Constants, \
InstanceExecHelper, JSON::Ext::Generator::GeneratorMethods::Object, \
ActiveSupport::Dependencies::Loadable, InstanceExecMethods, \
Base64::Deprecated, Base64, PP::ObjectMixin, Kernel]
(rdb:1) self.class.ancestors.include?(Test::Unit::Assertions)
true

, но мой метод def add_assertion игнорируется.

Так что является рекомендуемым способом вставить 'вызовите мой метод для каждоготочка утверждения в последовательности тестирования Rails 2.3.8?

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2011

Возможно, для вас уже есть подходящий крюковый механизм, но мне жаль, что я его не знаю. Не могли бы вы, возможно, создать базовый класс для ваших тестовых случаев, определить setup и тут же не забудьте вызвать super, если вам нужно переопределить его в ваших тестах?

РЕДАКТИРОВАТЬ 1

Извините, я упустил момент, когда мне нужно было специально подключиться к утверждениям. Я понимаю, что это не совсем соответствует вашей среде, но используя rails 3 и ruby ​​1.9, я запустил следующее:

тест / test_helper.rb

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.(yml|csv) 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

  def assert_with_beards(*args)
    puts "Size 8"
    assert_without_beards(*args)
  end 

  alias_method_chain :assert, :beards

  # Add more helper methods to be used by all tests here...
end

Выполнение базового теста в стиле assert true дает:

(in /Users/noodl/temp)
Loaded suite /Users/noodl/.rvm/gems/ruby-1.9.2-p136@rails30/gems/rake-0.8.7/lib/rake/rake_test_loader
Started
Size 8
.
Finished in 0.050746 seconds.

1 tests, 1 assertions, 0 failures, 0 errors, 0 skips

Полезно, что все утверждения, которые я видел в рельсах и в различных библиотеках ruby, в конечном итоге так или иначе вызывают assert.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...