Использование serverless-mocha-plugin для тестирования динамической конечной точки - PullRequest
0 голосов
/ 21 февраля 2019

Я создаю приложение API в NodeJS, используя инфраструктуру Serverless.Я установил serverless-mocha-plugin и пытаюсь создать несколько модульных тестов для своих функций.

В моем файле serverless.yml есть следующие конечные точки:

...
equipmentGetAll:
  handler: ./api/equipment/equipment.getAll
  events:
   - http:
     path: equipment
     method: get
     cors: true
equipmentGetOne:
  handler: ./api/equipment/equipment.getOne
  events:
    - http:
      path: equipment/{po_number}
      method: get
      cors: true
...

При тестированииgetAll конечная точка, я использую следующий тест, который успешно проходит.Я подтвердил, что он работает, зарегистрировав ответ на консоль.

'use strict';

// tests for equipmentGetAll
// Generated by serverless-mocha-plugin

const mochaPlugin = require('serverless-mocha-plugin');
const expect = mochaPlugin.chai.expect;
let wrapped = mochaPlugin.getWrapper('equipmentGetAll', '/api/equipment/equipment.js', 'getAll');

describe('equipmentGetAll', () => {
  before((done) => {
    done();
  });

  it('should get all Equipment', () => {
    return wrapped.run({po_number:117}).then((response) => {
      expect(response.statusCode).to.be.equal(200);
      expect(response.body.length).to.be.greaterThan(0);
    });
  });
});

Аналогично, для конечной точки getOne я (на данный момент) выполняю очень похожий тест:

'use strict';

// tests for equipmentGetOne
// Generated by serverless-mocha-plugin

const mochaPlugin = require('serverless-mocha-plugin');
const expect = mochaPlugin.chai.expect;
let wrapped = mochaPlugin.getWrapper('equipmentGetOne', '/api/equipment/equipment.js', 'getOne');

describe('equipmentGetOne', () => {
  before((done) => {
    done();
  });

  it('should get one single Equipment', () => {
    return wrapped.run({}).then((response) => {
      expect(response.statusCode).to.be.equal(200);
      expect(response.body.length).to.be.equal(1);
    });
  });
});

Проблема

Текущий ответ, который я получаю для getOne:

{ 
  statusCode: 500,
  headers: { 'Content-Type': 'text/plain' },
  body: 'Cannot read property \'po_number\' of undefined' 
}

Из-за того, что путь для getOne из serverless.yml означает equipment/{po_number}, а не просто equipment/.

Как правильно передать значение пути для теста?

Пример вызованажмите конечную точку my-api-endpoint.com/equipment/117 и верните Оборудование с помощью po_number 117.Это работает правильно при тестировании с POSTMan, но как я могу заставить его работать с mocha-serverless-plugin?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...