Модификация Объект запроса, отправленный экспресс при тестировании API запрос-ответ - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь протестировать простой запрос-ответ API, используя экспресс.Однако запросы должны иметь следующие поля в объекте запроса: user.userName и user.password, это код, который у меня есть до сих пор:

const express = require('express');
const log = require('../../../../logger');
const app = express();
const ClusterNode = require('../cluster-node');

// TODO: don't like these here. Needed to post. Put into global test startup if possible.
// TODO - OMRI: Reaplce this with the global test startup, when created.
const socketio = require('socket.io');
app.io = socketio.listen();
const bodyParser = require('body-parser');
app.use(bodyParser.json());


app.use('/v2/config/aw/', ClusterNode);
app.use(function(req, res, next) {
  req.user.userName = 'xxxx';
  req.user.password = 'xxxx';
  next();
});

describe('API - ClusterNode', () => {
  test('API - Get Cluster Nodes #1', () => {
    return request(app).get('/v2/config/aw/ClusterNode').then((response) => {
      expect(response.statusCode).toBe(200);
      expect(response.body.Node.length.toString()).toBe('0');
      expect(response.headers['content-type']).toMatch(/^application\/json/);
    });
  });
});

Я пытался добавить этот блок кода:

app.use(function(req, res, next) {
  req.user.userName = 'xxxx';
  req.user.password = 'xxxx';
  next();
});

однако он не справился с этой задачей.Есть идеи, как это сделать?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Если вы хотите, чтобы пользовательский объект был в req.user, используйте:

app.use(function(req, res, next) {
 req.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);

, и если вы хотите, чтобы он был в вашем req.body, используйте:

app.use(function(req, res, next) {
 req.body.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);
0 голосов
/ 20 сентября 2018

Ваша промежуточная функция для установки имени пользователя и пароля объявляется после вашего обработчика маршрута, поэтому я предполагаю, что он не вызывается.Переместите его, прежде чем объявить свой маршрут, например

app.use(function(req, res, next) {
  req.user = {
    'userName': 'xxxx',
    'password': 'xxxx'
  };
  next();
});
app.use('/v2/config/aw/', ClusterNode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...