我的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)
这就是我使用默认的rails new'd app
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 当我跑“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.
答案 0 :(得分:10)
如果您使用带有Rails的test-unit
,则无法执行任何操作。我相信这是Rails附带的activesupport
gem中的一个错误。更详细:
通常,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
....
然后运行测试并查看百分比结果。对我来说......它运作正常。
答案 1 :(得分:2)
我在一个旧的Rails 3.2.22应用程序上遇到了这个问题。我找到了一个比上面更容易的解决方案(上面给了我其他错误,因为它对版本等进行了假设)。
我将test-unit-rails
gem添加到我的gemfile中,对我来说,我必须将其锁定到版本1.0.4
,因为它支持我之前使用的测试单元版本。
在我的test_helper.rb
文件中,我添加了:
require "test/unit/active_support"
require 'active_support'
Here's我发现的文档。具体来说,它是测试单元的主动支持插件。
答案 2 :(得分:1)
尝试移除测试单元并安装迷你测试。在您的Gemfile中:
gem "minitest"
答案 3 :(得分:0)
我认为Time类可能存在问题。