Тесты Rails, показывающие 0% пройденных, когда все проходят - PullRequest
8 голосов
/ 10 октября 2011

Приложение My Rails проходит тестирование, но затем сообщает, что 0% пройдено.Это приложение Rails 3, преобразованное в 3.1.

5 tests, 11 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed

Если я создаю новое приложение Rails 3.1, у него нет этой "пройденной" строки.

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

Оба работают под 1.9.2 p290.

Я пытался удалить тестовый блок, но это, казалось, не имело значения, и больше ничего не выделялось мне, что могло бы вызвать это.Я предполагаю, что что-то вызывает использование другого бегуна.

Это гемы, установленные для моего приложения:

actionmailer (3.1.1)
actionpack (3.1.1)
activemodel (3.1.1)
activerecord (3.1.1)
activeresource (3.1.1)
activesupport (3.1.1)
ansi (1.3.0)
archive-tar-minitar (0.5.2)
arel (2.2.1)
bcrypt-ruby (3.0.1)
bootstrap-sass (1.3.0)
builder (3.0.0)
bundler (1.0.21)
coderay (0.9.8)
coffee-rails (3.1.1)
coffee-script (2.2.0)
coffee-script-source (1.1.2)
columnize (0.3.4)
devise (1.4.7)
devise_rpx_connectable (0.2.2)
enumerated_attribute (0.2.16)
erubis (2.7.0)
execjs (1.2.9)
haml (3.1.3)
hike (1.2.1)
i18n (0.6.0)
jquery-rails (1.0.14)
json (1.6.1)
json_pure (1.6.1)
linecache19 (0.5.12)
mail (2.3.0)
meta_programming (0.2.2)
method_source (0.6.6)
mime-types (1.16)
multi_json (1.0.3)
orm_adapter (0.0.5)
polyglot (0.3.2)
pry (0.9.6.2)
pry-doc (0.3.0)
rack (1.3.4)
rack-cache (1.1)
rack-mount (0.8.3)
rack-ssl (1.3.2)
rack-test (0.6.1)
rack-webconsole (0.1.2)
rails (3.1.1)
railties (3.1.1)
rake (0.9.2)
rdoc (3.10)
rpx_now (0.6.24)
ruby-debug-base19 (0.11.25)
ruby-debug19 (0.11.6)
ruby_core_source (0.1.5)
ruby_parser (2.0.6)
sass (3.1.10)
sass-rails (3.1.4)
sexp_processor (3.0.7)
slop (2.1.0)
sprockets (2.0.2)
sqlite3 (1.3.4)
test-unit (2.4.0)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
turn (0.8.2)
tzinfo (0.3.30)
uglifier (1.0.3)
warden (1.0.6)
yard (0.7.2)

И это то, что я получаю с рельсами по умолчанию new'dapp

actionmailer (3.1.1)
actionpack (3.1.1)
activemodel (3.1.1)
activerecord (3.1.1)
activeresource (3.1.1)
activesupport (3.1.1)
ansi (1.3.0)
arel (2.2.1)
builder (3.0.0)
bundler (1.0.21)
coffee-rails (3.1.1)
coffee-script (2.2.0)
coffee-script-source (1.1.2)
erubis (2.7.0)
execjs (1.2.9)
hike (1.2.1)
i18n (0.6.0)
jquery-rails (1.0.14)
json (1.6.1)
mail (2.3.0)
mime-types (1.16)
multi_json (1.0.3)
polyglot (0.3.2)
rack (1.3.4)
rack-cache (1.1)
rack-mount (0.8.3)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.1.1)
railties (3.1.1)
rake (0.9.2)
rdoc (3.10)
sass (3.1.10)
sass-rails (3.1.4)
sprockets (2.0.2)
sqlite3 (1.3.4)
test-unit (2.4.0)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
turn (0.8.2)
tzinfo (0.3.30)
uglifier (1.0.3)

EDIT

Я вырезал все из приложения и отправил его на github - https://github.com/kimptoc/zero-percent-bugette Когда я просто запускаю "rake", я все равно получаю 0%прошло:

$ rake
Loaded suite /Users/kimptoc/.rvm/gems/ruby-1.9.2-p290@p-viadropbox31/gems/rake-0.9.2.2/lib/rake/rake_test_loader
Started

Finished in 0.000897 seconds.

1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed

1114.83 tests/s, 1114.83 assertions/s
Coverage report generated for /Users/kimptoc/.rvm/gems/ruby-1.9.2-p290@p-viadropbox31/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb  to    /Users/kimptoc/dev/ruby/fran/zero-percent/coverage. 4 / 4 LOC (100.0%) covered.

Ответы [ 4 ]

10 голосов
/ 29 октября 2011

Если вы используете test-unit с Rails, то вы ничего не можете сделать. Я считаю, что это ошибка в activesupport геме, которая поставляется с Rails. Более подробно:

Обычно test-unit имеет метод add_pass, который увеличивает количество пройденных тестов. Это вызывается внутри run(...) метода (testcase.rb файл). Однако activesupport скрывает / переопределяет этот метод в своей собственной реализации. Это метод run(...) внутри файла setup_and_teardown.rb (Полное название метода: ActiveSupport::Testing::SetupAndTeardown::ForClassicTestUnit#run().

Я изменил этот метод следующим образом:

    def run(result)
      return if @method_name.to_s == "default_test"

      mocha_counter = retrieve_mocha_counter(result)
      yield(Test::Unit::TestCase::STARTED, name)
      @_result = result

      begin
        begin
          _run_setup_callbacks do
            setup
            __send__(@method_name)
            mocha_verify(mocha_counter) if mocha_counter
          end
        result.add_pass # XXXXXXXXXXXX My Addition to count passed tests XXXXXXXXXX
        rescue Mocha::ExpectationError => e
          add_failure(e.message, e.backtrace)
        rescue Test::Unit::AssertionFailedError => e
          add_failure(e.message, e.backtrace)
        rescue Exception => e
          raise if PASSTHROUGH_EXCEPTIONS.include?(e.class)
          add_error(e)
        ensure
          begin
            teardown
            _run_teardown_callbacks
          rescue Test::Unit::AssertionFailedError => e
            add_failure(e.message, e.backtrace)
          rescue Exception => e
            raise if PASSTHROUGH_EXCEPTIONS.include?(e.class)
            add_error(e)
          end
        end
      ensure
        mocha_teardown if mocha_counter
      end

      result.add_run
      yield(Test::Unit::TestCase::FINISHED, name)
    end

Я добавил result.add_pass, которого там не было, и теперь проценты должны быть в порядке.

ОБНОВЛЕНИЕ : Чтобы помочь вам интегрировать это изменение и самостоятельно проверить / проверить, вы можете клонировать созданную мной суть с помощью следующей команды:

git clone git://gist.github.com/1324512.git gist-1324512

Это создаст файл с именем: active_support_test_unit_pass_count.rb

Переместите его в папку test, где находится файл test_helper.rb, и укажите его в файле test_helper.rb, точно перед определением класса ActiveSupport::TestCase:

require 'active_support_test_unit_pass_count'

class ActiveSupport::TestCase

....

Затем запустите ваши тесты и посмотрите результат в процентах. Для меня ... это работало нормально.

2 голосов
/ 11 ноября 2017

Я столкнулся с этим в старом приложении Rails 3.2.22. Я нашел более простое решение, чем приведенное выше (выше я обнаружил другие ошибки, поскольку он делает предположения о версиях и т. Д.). Я добавил test-unit-rails gem в свой gemfile, для меня мне пришлось заблокировать его до версии 1.0.4, поскольку он поддерживал версию тестового модуля, которую я ранее использовал.

В моем test_helper.rb файле я добавил:

require "test/unit/active_support"
require 'active_support'

Вот документы, из которых я его нашел. В частности, это плагин активной поддержки для test-unit.

1 голос
/ 25 октября 2011

Попробуйте снять тестовый блок и установить мини-тест.В вашем Gemfile:

gem "minitest"
0 голосов
/ 29 октября 2011

Я думаю, что могут быть проблемы с классом Time.

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