【问题标题】:extending Rake's test tasks扩展 Rake 的测试任务
【发布时间】:2011-12-19 09:27:31
【问题描述】:

我有一些使用 PhantomJS 的纯 JavaScript 客户端测试。这些我想与rake test 集成。

目前我用这个:

namespace :test do

  task :client do
    basedir = Rails.root.join("test", "client")
    sh "cd #{basedir} && phantomjs lib/run-qunit.js index.html"
  end

end

task :test => "test:client"

但是,这种集成远非完美;如果其中一项测试失败,则 rake 中止。另外,与:units:functionals:integration相比,最后没有总结问题(例如“6个测试、21个断言、1个失败、0个错误”)。

我可以很容易地提取这些数据,但我如何告诉 Rake 将其添加到总测试计数中?

【问题讨论】:

  • 我对 Rails 不熟悉,所以可能我误解了一些东西。但是我在您的任务中看不到任何测试。您定义了一个任务,但没有测试,只有一个 shell 命令的调用。当你想测试一个 Web 应用程序时,你应该查看 watir。
  • 测试使用纯 JavaScript,因此从 index.html 引用(通过SCRIPT 标签)。

标签: ruby rake rake-test


【解决方案1】:

您正在通过sh 调用一个shell 命令。 Ruby 不知道,这是一个测试。 此外,如果发生故障,sh 似乎会停止。

您必须做两件事:捕获错误并检查调用结果。

一个例子:

require 'rake'
$summary = Hash.new(0)

def mytest(name, cmd)
  $summary['test'] += 1
  sh cmd do |ok, res|
    if ok 
      $summary['ok'] += 1
    else
      $summary['failure'] += 1
      puts "#{cmd } failed"
    end
  end
end
namespace :test do
  task :one do |tsk|
     mytest(tsk.name, "dir")
  end
  task :two do |tsk|
     mytest(tsk.name, "undefined_cmd")
  end
  task :summary do
    p $summary
  end
end

task :test => "test:one"
task :test => "test:two"
task :test => "test:summary"

sh 使用块调用以捕获故障。在块内部,我分析结果(正确表示为 true,如果脚本因错误停止,则为 false。结果将添加到摘要哈希中。

为了您的使用,您可以修改代码并将代码拆分为两个文件:所有测试在一个文件中。并且 rake 文件得到一个Rake::TestTast

您的测试文件可能如下所示:

gem 'test-unit'
require 'test/unit'

class MyTest < Test::Unit::TestCase
  def test_one
    assert_nothing_raised{
      basedir = Rails.root.join("test", "client")        
      res = system("cd #{basedir} && phantomjs lib/run-qunit.js index.html")
      assert_true(res)
    }

  end
  def test_two
    assert_nothing_raised{
      res = `dir` #Test with windows
      assert_match(/C:/, res) #We are in c: 
    }
  end
end

仅当您的测试以退出代码结束时才有效。也许您可以改用`` 并获取测试的输出以进行详细分析。

【讨论】:

  • 谢谢,这似乎很有帮助 - 我的第一次尝试失败了,但这可能意味着我必须再重新阅读您的说明几次。一旦我有机会深入挖掘就会接受。
  • 我最终按照您的建议将 PhantomJS 调用移动到单元测试中。不过我得承认,我不太明白你的 Rake 任务在做什么,或者为什么它是必要的。不管怎样,谢谢你让我走上正轨!
猜你喜欢
  • 2010-11-18
  • 2015-12-29
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 2011-06-07
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多