Как смоделировать требование на модульном тесте API Mocha / Chai - PullRequest
0 голосов
/ 19 апреля 2019

Используя Mocha / Chai для модульного тестирования REST API, мне нужно иметь возможность смоделировать req.session.someKey для нескольких конечных точек. Как я могу заниматься насмешкой req.session?

Я работаю над написанием модульных тестов API REST для приложения NodeJS Express, в котором используется экспресс-сессия. Некоторые из этих конечных точек требуют использования данных, хранящихся в req.session.someKey, конечная точка настроена на возврат 400, если req.session.someKey не определено, поэтому мне нужно иметь возможность смоделировать ее для успешного завершения теста.

Пример кода:

router.get('/api/fileSystems', utilities.apiAuth, (req, res) => {
  let customer = req.session.customer;
  let route = (customer === 'NONE') ? undefined : customer;

  if(route == undefined){
    res.status(400).send('Can't have customer of undefined');
  } else {
    let requestOptions = setRequestOptions(route);
    queryFileSystemInfo(requestOptions, (info) => {
      res.status(200).send(info);
    });

  }
});

Что я пробовал:

describe('/GET /api/fileSystems', () => {
  it('It should return information about the filesystem for a customer'), (done) => {
    chai.request(server)
      .get('api/fileSystems')
      .set('customer', '146')
      .end((err, res) => {
        res.should.have.status(200);
        done();
      });
  });
});

Я пытался использовать .set() для установки req.session, но я считаю, что .set просто устанавливает заголовки, поэтому я не верю, что могу обновить его таким образом, если я что-то упустил.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Для этого проекта мне пришлось установить req.session.customer в нашем файле server.js с вызовом app.use(), который использует функцию промежуточного программного обеспечения для установки текущего сеанса.Мне не удалось найти пакет, который непосредственно изменяет объект req.session во время тестирования.

0 голосов
/ 19 апреля 2019

mock-session довольно полно для насмешки вашего объекта сессии

 let mockSession = require('mock-session');

 describe('/GET /api/fileSystems', () => {
  it('It should return information about the filesystem for a customer'), (done) => {
    let cookie = mockSession('my-session', 'my-secret', {"count":1});  // my-secret is you session secret key. 

    chai.request(server)
      .get('api/fileSystems')
      .set('cookie',[cookie])
      .end((err, res) => {
        res.should.have.status(200);
        done();
      });
  });
});
...