如何在Node的supertest中设置req.params参数?

时间:2016-03-01 15:26:46

标签: javascript node.js express supertest

我的OAuth中间件希望在req.params中获取参数。

request(app)
.post('/api/token')
.set('Content-Type', 'application/x-www-form-urlencoded')
.send({grant_type:'password'})
.expect(200)

.send({grant_type:'password'})无济于事。我不知道它用于什么。

2 个答案:

答案 0 :(得分:0)

表达自动填充内容req.params。如果您定义路线something/:name,那么它应该在req.params.name上。来自documentation

  

此属性是一个包含映射到named的属性的对象   路线“参数”。例如,如果您有route / user /:name,   然后“name”属性可用作req.params.name。这个对象   默认为{}。

所以,如果你做了最专业的例子

request(app)
.post('/api/token')
.set('Content-Type', 'application/x-www-form-urlencoded')
.send({grant_type:'password'})
.expect(200)

.send({grant_type:'password'})部分填充req.body,而不是req.params

答案 1 :(得分:0)

对于相同的需求,您可以使用这样的超级测试

const app = require('../server'),
chai = require('chai'),
should = require('should'),
request = require('supertest');

describe("/get /:userId", () => {
it("should fetch user by id successfully", (done) => {
    request(app)
        .get("/users/" + userId)
        // .query({ userId: userId })
        .set('Accept', 'application/json')
        .set({ 'x-access-token': token })
        .expect('Content-Type', /json/)
        .end((err, res) => {
            res.status.should.equal(200);
            // console.log("res.body.data.users = ",res.body)
            // res.body.should.a("object");
            res.body.data.should.have.property("users");
            done();
        });
});

});