问题描述
我正在用 Lua 编写一些 kong 自定义插件。我使用的是 Kong 2.3.3 和 Lua 5.1。
我有一些测试用例(单元测试 + 集成测试),我正在使用 pongo run -coverage 选项运行它们。我已经安装了 luacov(还有 cluacov,都安装了 luarocks)并且我所有的测试都通过了,但是没有生成包含覆盖数据的 luacov 文件。我没有从 Docker 运行 pongo,我已经在本地机器(Linux Ubuntu 20.04)上安装并配置了它。
我已经尝试了以下几点:
- 我的 .busted 文件设置了coverage = true、verbose = true 和output = "gtest"(已经尝试过utfTerminal、tap 和json)
- 尝试将 luacov 作为依赖项添加到我的 Rockspec 文件中...构建没有失败,但没有生成覆盖文件
- 我什至尝试在没有 pongo 的情况下直接使用 busted 来运行测试,但这是一个非常糟糕的选择,因为我的 LUAPATH 中没有设置诸如 spec.helpers 或 cjson 库之类的东西
解决方法
一个快速的方法是修改 pongo
将您的 pongo.sh 文件编辑为:
- 将覆盖标志添加到已破坏的
bytearray
- 调用 luacov 生成报告
--coverage
- 显示报告
luacov
找到调用 busted 的地方,我的第 959 行:
cat luacov.report.out
安装"/bin/sh" "-c" "bin/busted --coverage --helper=bin/busted_helper.lua ${busted_params[*]} ${busted_files[*]};luacov;cat luacov.report.out"
,编辑luacov
安装失败后添加 luacov:
assets/Dockerfile
&& luarocks install busted-htest \
&& luarocks install luacov \
会给你
pongo run
,
可以基于pongo创建docker镜像
spec/unit/docker/Dockerfile
FROM kong-pongo-test:2.3.2
USER root
RUN luarocks install luacov
WORKDIR /kong-plugin
COPY . .
spec/unit/docker/run.sh
#!/bin/sh
busted --coverage spec/unit
luacov
cat luacov.report.out
运行
docker build -f spec/unit/docker/Dockerfile -t my-coverage .
docker run my-coverage sh spec/unit/docker/run.sh
,
Pongo 对此获得了一些支持(仍然是 PR)。请注意,它只涵盖单元测试,不包括集成测试。
见https://github.com/Kong/kong-pongo/pull/184
btw: 其他答案太复杂了,你可以添加.pongo/pongo-setup.sh
来安装LuaCov,并将.luacov
文件从/kong-plugin
移动到/kong
。这应该是所有必要的。
可以通过传递标志来简单地运行具有覆盖率的测试,无需编辑 pongo 或 dockerfile。例如,试试 pongo run -- --coverage
。