我在我们的rails app中有一个测试挂起无法找出哪一个(因为它挂起并且没有得到失败报告)。我发现这篇博文http://bmorearty.wordpress.com/2008/06/18/find-tests-more-easily-in-your-testlog/添加了一个设置挂钩来打印测试名称,但是当我尝试做同样的事情时,它给出了一个错误,指出错误的设置参数数量(1表示0)。任何帮助都将不胜感激。
答案 0 :(得分:41)
如果使用rake运行测试,它将起作用:
rake test:units TESTOPTS="-v"
答案 1 :(得分:6)
测试名称的打印是TestRunner的责任。如果从命令行运行测试,则可以指定-v选项,以打印出测试用例名称。
示例:
ruby test_Foo.rb -v
Loaded suite test_Foo
Started
test_blah(TestFoo): .
test_blee(TestFoo): .
Finished in 0.007 seconds.
2 tests, 15 assertions, 0 failures, 0 errors
答案 2 :(得分:4)
这就是我在test_helper.rb
中使用的内容class Test::Unit::TestCase
# ...
def setup_with_naming
unless @@named[self.class.name]
puts "\n#{self.class.name} "
@@named[self.class.name] = true
end
setup_without_naming
end
alias_method_chain :setup, :naming unless defined? @@aliased
@@aliased = true
end
@@ aliased变量可以防止它在一次运行多个文件时被重新别名; @@ named保持名称不会在每次测试之前显示(在第一次测试之前)。
答案 3 :(得分:3)
博客文章中的定义应该是特定的(setup(& block)方法是在context.rb中的Thoughtbot :: Shoulda模块中定义的.adna.rb然后让TestCase扩展该模块)。
pure test :: unit的定义是
# File test/unit/testcase.rb, line 100
def setup
end
你能做的是
def setup
log_test
end
private
def log_test
if Rails::logger
# When I run tests in rake or autotest I see the same log message multiple times per test for some reason.
# This guard prevents that.
unless @already_logged_this_test
Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n"
end
@already_logged_this_test = true
end
编辑
如果您真的不想编辑文件,则可能会冒险重新打开测试用例并延长运行时间:
class Test::Unit::TestCase
alias :old_run :run
def run
log_test
old_run
end
end
这应该有用(虽然我没有测试红宝石)
我检查了代码并且rails实际上在场景背后做了魔术,这可能是为什么重新定义运行不起作用的原因。
事情是:魔术的一部分包括ActiveSupport :: CallBack并为安装和拆卸创建回调。
表示
class Test::Unit::TestCase
setup :log_test
private
def log_test
if Rails::logger
# When I run tests in rake or autotest I see the same log message multiple times per test for some reason.
# This guard prevents that.
unless @already_logged_this_test
Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n"
end
@already_logged_this_test = true
end
end
end
绝对应该有用
并且实际运行测试确实有效。令我感到困惑的是,这是我尝试的第一件事,它失败了你得到的同样的错误
答案 4 :(得分:0)
您使用的是哪种测试框架?测试/单元
我会看一下RSpec,它会为你的测试提供更多的上下文。您还可以获得一个很好的HTML报告,如下所示:
RSpec Result http://myskitch.com/robbyrussell/rspec_results-20070801-233809.jpg
如果您有任何失败的测试,特定的测试将是红色的,它将扩展到测试失败的特定行,以便您更清楚地了解测试失败的原因以及您应该在哪里解决问题。
答案 5 :(得分:0)
如果其他任何人都遇到相同的问题,但集成测试和无头Web服务器,则以下ruby代码将在运行之前打印出测试文件名
Dir["test/integration/**/*.rb"].each do |filename|
if filename.include?("_test.rb")
p filename
system "xvfb-run rake test TEST=#{filename}"
end
end