5 tests,11 assertions,0 failures,0 errors,0 pendings,0 omissions,0 notifications 0% passed
如果我生成一个新的Rails 3.1应用程序,它没有这个“通过”线.@H_403_5@
1 tests,1 assertions,0 skips
两者都在1.9.2 p290下运行.@H_403_5@
我试图删除测试单元,但这似乎并没有什么区别,没有其他任何突出的东西会导致它.我想有些东西正在触发使用不同的测试运行器.@H_403_5@
这些是我的应用程序安装的宝石:@H_403_5@
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)
这就是我使用默认的rails new’d app获得的@H_403_5@
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)
编辑@H_403_5@
我从应用程序中删除了所有内容并将其推送到github – https://github.com/kimptoc/zero-percent-bugette
当我只是跑“耙”时,我仍然得到0%的通过:@H_403_5@
$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,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.
解决方法
通常,测试单元有一个方法add_pass,可以增加通过的测试计数.这称为run(…)方法(testcase.rb文件).但是,activesupport会使用自己的实现隐藏/覆盖此方法.它是文件setup_and_teardown.rb中的方法run(…)(方法的全名是ActiveSupport :: Testing :: SetupAndTeardown :: ForClassicTestUnit#run().@H_403_5@
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,现在百分比应该没问题.@H_403_5@
更新:为了帮助您集成此更改并自行测试/查看,您可以使用以下命令克隆我创建的要点:@H_403_5@
git clone git://gist.github.com/1324512.git gist-1324512
这将创建一个名为active_support_test_unit_pass_count.rb的文件@H_403_5@
将其移至test_helper.rb文件所在的测试文件夹,并在test_helper.rb文件中将其移至需要它,正好在ActiveSupport :: TestCase类的定义之前:@H_403_5@
require 'active_support_test_unit_pass_count' class ActiveSupport::TestCase ....
然后运行测试并查看百分比结果.对我来说……它运作正常.@H_403_5@