Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 扩展Rake';测试任务_Ruby_Rake_Rake Test - Fatal编程技术网

Ruby 扩展Rake';测试任务

Ruby 扩展Rake';测试任务,ruby,rake,rake-test,Ruby,Rake,Rake Test,我有一些使用PhantomJS的纯JavaScript客户端测试。我想与rake测试集成这些功能 目前我使用的是: 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

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

目前我使用的是:

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将其添加到总测试计数中?

您正在通过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
用一个块调用以捕获故障。在块内部,我分析结果(ok为true,如果脚本因错误而停止,则为false)。结果被添加到摘要哈希中

对于您的使用,您可以修改代码并将代码拆分为两个文件:所有测试都在一个文件中,而rake文件将获得一个

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

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
gem“测试单元”
需要“测试/单元”
类MyTest

这只在您的测试以退出代码结束时有效。也许您可以使用
`
来代替,并获取测试的输出以进行详细分析。

我不熟悉Rails,因此可能我误解了某些内容。但是我在您的任务中看不到任何测试。您定义了一个任务,但没有测试,只有调用shell命令。如果您想要测试web应用程序您应该查看watir。测试使用纯JavaScript,因此被引用(通过
SCRIPT
tags)从index.html.谢谢,这似乎很有帮助-我的第一次尝试失败了,但这可能只是意味着我将不得不重新阅读您的说明几次。我将在有机会深入挖掘时接受。我最终按照您的建议将PhantomJS调用移动到单元测试中。不过,我必须承认,我不太明白您的Rake任务是什么不管怎样,谢谢你让我走上正轨!