如何使用 NodeJS 的 supertest 测试 GET 请求的路径参数?

use*_*693 3 testing rest node.js supertest

我找到了如何测试查询参数的示例

例如:

/api/browser?parameter1=2341&parameter2=5663
Run Code Online (Sandbox Code Playgroud)

但如果我有路径参数(如下所示的 URL),我找不到如何参数化测试:

const ENDPOINT_DETAILS = "/api/browser/:parameter";
app.get(ENDPOINT_DETAILS, function (req, res) {

    logger.info("Endpoint called: " + ENDPOINT_DETAILS);
    var details = {}
    // ... magic
    res.send(details);
}
Run Code Online (Sandbox Code Playgroud)

如果我不想修复参数,我的测试应该是什么样子?

describe("returns details", function() {

    it("returns status 200", function(done) {

        var sampleData = "sample_detail";

        // this won't work
        restApi.get('/api/browser/:parameter')
            .set('Accept', 'application/json')
            .expect(200, { "text" : "Detail of " + parameter + " is: " + sample_text})
            .end(function(err, res) {
                if (err) throw err;
                done();
            });

    });
});
Run Code Online (Sandbox Code Playgroud)

在调用之前是否可以知道parameterhere的值?restApi.get()

Mik*_*kaS 7

您必须提供 的实际数字:parameter。例如

restApi.get('/api/browser/1234')
Run Code Online (Sandbox Code Playgroud)

毕竟端点需要提供真实的值。req.params.parameter那么端点函数中的值将是 1234。

我不太清楚你所说的不修复参数是什么意思。您想使用变量来使测试可重复用于多个参数吗?那我就简单地做

let parameter = 1234;
restApi.get('/api/browser/' + parameter)
Run Code Online (Sandbox Code Playgroud)