Heroku CI 支持 TAP(测试任何协议)输出,以在检测到时提供增强的 UI。
但是,我无法让 Heroku CI 显示这个增强的 UI。我的猜测是我生成的 TAP 输出不太正确,但是我看不出它有什么问题。
如果您的 TAP 输出专门与 Heroku CI 一起使用,并且它肯定显示了增强的 UI,请您在下面提供一个示例吗?
此外,您能否确认是否可以在 TAP 输出之前和/或之后打印出任何额外信息,或者 TAP 报告周围的输出是否需要完全为空?
在撰写本文时,在 Heroku 上,带有前导空格的 TAP 输出行无效。Heroku CI 在 ruby-buildpack 上的默认测试命令自动缩进所有测试输出,因此由于这些自动缩进,TAP 输出无效。
要解决自动缩进并生成有效的 TAP 输出,请在app.json
. 使用自定义测试脚本绕过 ruby-buildpack 的自动缩进。
这是一个app.json
带有自定义测试脚本的示例bin/rspec
:
{
"environments": {
"test": {
"addons": ["heroku-postgresql:in-dyno"],
"buildpacks": [
{ "url": "heroku/ruby" },
{ "url": "https://github.com/heroku/heroku-buildpack-google-chrome" }
],
"env": {
"DISABLE_SPRING": "true"
},
"scripts": {
"test": "bin/rspec"
}
}
}
}
这是 Heroku CI 将处理以显示增强 UI 的有效 TAP(版本 12)输出的示例(如果您一直在观看正在进行的构建,您可能需要刷新页面才能看到增强的 UI):
# Randomized with seed 12345
1..2
ok 1 - PayHelper#js_host returns production host as default
not ok 2 - PayHelper#js_url returns production v9 URL as default
#
# PayHelper#js_url returns production v9 URL as default
# Failure/Error: expect(helper.js_url).to eq 'https://example.com/v9/'
#
# expected: value != "https://example.com/v9/"
# got: "https://example.com/v9.0/"
#
# (compared using ==)
# # ./spec/helpers/pay_helper_spec.rb:15:in `block (3 levels) in <top (required)>'
# # -e:1:in `<main>'
1..2
# Randomized with seed 12345
注意,上面的输出是 TAP 规范版本 12,虽然我知道 Heroku 也支持 TAP 规范版本 13。