【问题标题】:How find the file/test which is causing rake test task to terminate?如何找到导致 rake 测试任务终止的文件/测试?
【发布时间】:2012-04-16 08:13:04
【问题描述】:

我正在使用 rake 任务来运行我的应用程序的测试套件。
我可以看到,当我启动任务时它会运行命令

ruby -I"lib:test" -I"[...]/lib" "[...]/lib/rake/rake_test_loader.rb" "vendor/plugins/shop/test/**/*_test.rb"

[...] 是我 gemset 中 rake gem 的路径。

当我运行任务时,我收到了一些警告和一些.,这意味着一些测试通过但我最终得到terminated

日志示例:

...................................... 7431 Terminated

注意 7431 是 PID。

我找不到有关此案例的任何信息,详细或跟踪选项无法帮助我找出我的测试套件损坏的地方。

有谁知道我能做些什么来解决这个问题?

【问题讨论】:

    标签: ruby-on-rails testing rake rake-task rake-test


    【解决方案1】:

    我不知道,是什么进程创建了“已终止”消息,但您可以尝试以下操作:

    添加一个

    def setup
      puts "Start test #{self.__name__}"
      STDOUT.flush
    end
    def teardown
      puts "Finished test #{self.__name__}"
      STDOUT.flush
    end
    

    你所有的测试。

    例子:

    require 'test/unit'
    
    class Mytest < Test::Unit::TestCase
      def test_1
        assert_equal(1,1)
      end
      def test_2
        assert_equal(1,1)
        exit 1  ##stops the execution
      end
      def test_3
        assert_equal(1,1)
      end
    end
    

    结果

    Loaded suite test
    Started
    .>Exit code: 1
    

    测试已停止,您看不到在哪里。我希望这与您的“终止”消息类似。

    现在添加一些代码:

    require 'test/unit'
    
    class Mytest < Test::Unit::TestCase
      def setup
        puts "Start test #{self.__name__}"
        STDOUT.flush
      end
      def teardown
        puts "Finished test #{self.__name__}"
        STDOUT.flush
      end
      def test_1
        assert_equal(1,1)
      end
      def test_2
        assert_equal(1,1)
        exit 1  ##stops the execution
      end
      def test_3
        assert_equal(1,1)
      end
    end
    

    这会导致:

    Loaded suite test
    Started
    Start test test_1
    Finished test test_1
    .Start test test_2
    Finished test test_2
    

    最后提到的test_2是有问题的那个。

    您还可以将setupteardown 添加到每个测试用例(但如果您有自己的设置/拆卸定义,它们将不包含测试代码)。

    require 'test/unit'
    
    class Test::Unit::TestCase
      def setup
        puts "Start test #{self.__name__}"
        STDOUT.flush
      end
      def teardown
        puts "Finished test #{self.__name__}"
        STDOUT.flush
      end
    end
    

    不要忘记删除代码 - 它只是为了确定您的问题可能出在哪里。

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2010-11-09
      • 2015-12-29
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2014-09-06
      • 2011-12-19
      相关资源
      最近更新 更多