2011-10-09 66 views
8

我的Rails应用程序通过了它的测试,但后来说0%通过了。它的Rails 3应用程序转换为3.1。当全部通过时,Rails测试显示0%通过

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'd应用

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) 

编辑

我已经切出一切从应用程序,并推到github - https://github.com/kimptoc/zero-percent-bugette 当我只是运行“耙”,我仍然得到0%通过:

$ rake 
Loaded suite /Users/kimptoc/.rvm/gems/[email protected]/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/[email protected]/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. 
+0

你有什么完整的项目可以看看吗? – Oleander

+0

嗨,夹竹桃 - 让我看看我能敲出什么 –

+1

当你完成后,把它推到Github。 – Oleander

回答

9

如果你正在使用test-unit与Rails,那么你什么都不能做。我相信这是在Rails附带的activesupport gem中的一个bug。更详细地说:

通常,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这是不存在的,现在的百分比应该是确定。

UPDATE:为了帮助你整合这一变化,并测试/看到自己,你可以克隆,我已经使用下面的命令创建一个要点:

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 

.... 

然后运行您的测试并查看百分比结果。对我来说...它工作得很好。

+0

谢谢 - 听起来不错,虽然它没有看到米有帮助...尝试一些调整,看看我能得到它但没有喜悦 - https://github.com/kimptoc/zero-percent-bugette –

+2

@ChrisKimpton我的朋友,我应该说**在_ActiveSupport :: TestCase类定义之前。之前移动'require'active_support_test_unit_pass_count'** **行。我克隆了你的仓库。我发现它没有用(正如你所说的),然后在班级的定义之前移动了这条线,并且这次成功地运行了。试试你自己,你会看到。 (我也编辑了我的答案以反映此问题) –

+0

这样做 - 谢谢。看起来像一个Rails/activesupport bugette - 将在rails问题列表中引发它。 –

1

尝试移除测试单元并安装微型测试。在你的Gemfile中:

gem "minitest" 
+0

谢谢 - 但没有区别,仍然说0%通过了,但都是绿色的。我以为minitest是在1.9,但我想还有更多的是... –

+0

你有没有尝试过没有ruby-debug19在你的gemfile?只是在黑暗中刺伤,在这一点上。 – WattsInABox

+0

大声笑 - 同样在这里,只是试图卸载,也没有更好的:( –

0

我觉得Time class可能有问题。

+0

好吧 - 更具体的... 1.9.2错误?Rails /时间问题?... –

1

我在旧的Rails 3.2.22应用程序中遇到了这个问题。我发现比上面更容易的解决方案(上面给了我其他错误,因为它使版本等假设)。 我在我的gemfile中添加了test-unit-rails gem,对于我,我不得不锁定版本1.0.4,因为它支持我以前使用的测试单元的版本。

在我test_helper.rb文件我补充:

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

Here's的文档,我发现它。具体来说,它是测试单元的主动支持插件。