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

标签 javascript testing jestjs supertest

我正在使用 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/

相关文章:

javascript - 选择并复制输入文本onclick?

javascript - 更改 jqGrid 中的语言

javascript - 递归无法正常工作并且在不执行定义的情况下退出功能?

java - 我如何对 toCompare() 方法进行单元测试,比较 2 个对象?

vue.js - VIcon 导致 jest 测试失败(Vue 2/Vuetify 3)

javascript - 使用 fireEvent 传递自定义事件属性(测试库和 Jest )

JavaScript 键盘事件未触发

android - 如何在没有应用程序的情况下测试 GCM 通知?

docker - 在具有某些 CPU/RAM 配置的 docker 中运行时 Jest 挂起

php - Laravel 单元测试上的 PDO 扩展