gpt4 book ai didi

ruby - 扩展 Rake 的测试任务

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:53 24 4
gpt4 key购买 nike

我有一些使用 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 tests , 21 个断言,1 个失败,0 个错误”)。

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

最佳答案

您正在通过 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 与 block 一起调用以捕获失败。在 block 内,我分析结果(如果脚本正常则为 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

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

关于ruby - 扩展 Rake 的测试任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7965185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com