gpt4 book ai didi

javascript - 使用 super 测试传递请求正文以发布

转载 作者:行者123 更新时间:2023-12-05 08:07:16 25 4
gpt4 key购买 nike

我正在使用 super-test 测试一个快速服务器,我需要测试一个 post 调用。我假设帖子应该成功并返回 200 状态,但它返回 401。有人告诉我我需要在帖子中传递请求正文,但我不确定具体如何执行此操作。

我尝试使用 .send({name: 'aName'}) 但这给了我相同的 401 代码。

下面是app.js

require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
const hateoasLinker = require('express-hateoas-links');
const AValidator = require('./AValidator');
const BValidator = require('./BValidator');
const schema_v1 = require("./schema.json");
const {
logService: logger
} = require("@utils");

let aValidator = AValidator(schema_v1);

let ValidatorApi = BValidator.ValidatorApi('api');
let adminValidator = BValidator.ValidatorAdmin('admin');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(hateoasLinker);

app.post('/*/activate',admiValidator, (req, res) => {
console.log("In Activate===============>");
res.status(200);
res.json({
rel: "self",
method: "POST",
title: 'Activate Solution',
href: "/activate"
});
});

这是 BValidator 的代码

ValidatorAdmin = function(callType){
return function (req,res,next){
let authoizationHeader = req.headers['authorization'];
try {
Verifier.verifyPayload(authoizationHeader, callType, (verificationError) => {
if (verificationError) {
res.setHeader('Content-Type', 'application/json');
res.status(401);
res.json({
message : "verificationError "+verificationError.message
});
} else {
next();
}
});
} catch (authorizationError) {
res.setHeader('Content-Type', 'application/json');
res.status(401);
res.json({
message : authorizationError.message
});

}
}
}

这是 app.test.js

const request = require('supertest');
const bodyParser = require('body-parser');
let AValidator = require('../src/AValidator');
let BValidator = require('../src/BValidator');
BValidator = jest.fn();
AValidator = jest.fn();
app = require('../src/app');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

describe('Test os GET/POST calls in app.js', ()=>{

test('Tests activate post', (done)=>{

BValidator.mockReturnValue({
ValidatorApi: (req,res,next)=>{
next();
},
ValidatorAdmin:(req,res,next)=>{
next();
}
});

AValidator.mockImplementation((schema)=>{
return function (req,res,next){
next();
}
});


request(app)
.post('/test/activate')
.set({name:'josh'})
.then((response)=>{
expect(response.statusCode).toBe(200);
done();
})

})


});

So ultimately I'd like this post to resolve successfully and return a status code of 200.

最佳答案

我假设您已正确设置解析器。示例:

 const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

设置完成后,我相信您会丢失标题。示例:

const payload = {name: 'john', email: 'xyz@sadfjak.com', password: '2342388' };
const res = await request(app)
.post('/api/register')
.send(payload)
.set('Content-Type', 'application/json')
.set('Accept', 'application/json')

关于javascript - 使用 super 测试传递请求正文以发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com