如何在test::base/test::nginx/perl测试用例中添加换行符?

z2acfund  于 2023-02-19  发布在  Perl
关注(0)|答案(1)|浏览(139)

我在Apache APISIX中实现一个特性时编写了测试用例,遇到了一个顽固的错误,与"预期"部分相比,"已获得"部分中有一个额外的换行符。

下面是测试的代码:

=== TEST 8: get value from vault: token env var wrong/missing
--- config
    location /t {
        content_by_lua_block {
            local vault = require("apisix.secret.vault")
            local conf = {
                prefix = "kv/apisix",
                token = "$ENV://VALT_TOKEN",
                uri = "http://127.0.0.1:8200"
            }
            local value, err = vault.get(conf, "/apisix-key/jack/key")
            if err then
                return ngx.say(err)
            end

            ngx.print("value")
        }
    }
--- request
GET /t
--- response_body
failed to decode result, res: {"errors":["permission denied"]}


=== TEST 9: get value from vault: token env var contains wrong token
--- config
    location /t {
        content_by_lua_block {
            local vault = require("apisix.secret.vault")
            local conf = {
                prefix = "kv/apisix",
                token = "$ENV://WRONG_VAULT_TOKEN",
                uri = "http://127.0.0.1:8200"
            }
            local value, err = vault.get(conf, "/apisix-key/jack/key")
            if err then
                return ngx.say(err)
            end

            ngx.print("value")
        }
    }
--- request
GET /t
--- response_body
failed to decode result, res: {"errors":["permission denied"]}

我尝试在预期部分的末尾添加"\n",如下所示:

--- response_body
failed to decode result, res: {"errors":["permission denied"]}\n

但是这不起作用,所以我试着用引号"..."把"expected"部分括起来,这样换行符就包括在内了,但也不起作用。
另一种方法是通过编写一些代码来删除"get"部分的换行符,但我认为这不是一个理想的做法(修改响应)。
提前感谢!!
下面是工作流操作运行的link

wfsdck30

wfsdck301#

这很简单!我不知道我们可以用正则表达式来匹配"得到"和"期望"。这就是我是怎么做的。
我替换了这个:

--- response_body
failed to decode result, res: {"errors":["permission denied"]}

用这个:

--- response_body_like
failed to decode result, res: {\"errors\":\[\"permission denied\"\]}\n

我们的想法是使用response_body_like构造来使用正则表达式进行表达式匹配,这要感谢this blog

相关问题