Преобразование API-теста Mocha из асинхронного ожидания в Supertest - PullRequest
0 голосов
/ 04 сентября 2018

У меня следующий вопрос, я начинаю писать тест API, теперь это выглядит так:

  xit('should add address ', async () => {
    const result = await request({
      headers: Object.assign(config.headers, { 'Authorization': 'Bearer '+auth_token }),
      url: `${config.url}/rest/v1/address/`,
      method: "POST",
      json: {
        "name": generatedAddressName,
        "city": "WARSZAWA",
        "street": "UL. KASPROWICZA",
        "houseNumber": "49XX",
        "apartNumber": "",
        "lat": 52.176903,
        "lng": 21.028369,
        "zipCode": "02-732",
        "isDefault": false,
        "inDeliveryZone": true
      }
    });
  });

теперь я читаю о библиотеке Supertest, тесты под Supertest выглядят более читабельными, и я хочу преобразовать свои тесты в Supertest Я пытался сделать это, и нет никаких эффектов, теперь у меня есть:

  it('should add address supertest', function(done) {
    request
      .post('/rest/v1/address/')
      .set(config.headers)
      //.set('Accept', 'application/json')
      .set('Authorization', 'Bearer ' + auth_token)    
      .send({
        "name": generatedAddressName,
        "city": "WARSZAWA",
        "street": "UL. KASPROWICZA",
        "houseNumber": "51",
        "apartNumber": "",
        "lat": 52.176903,
        "lng": 21.028369,
        "zipCode": "02-732",
        "isDefault": false,
        "inDeliveryZone": true
      })
      .expect(200)
      .end(function(err,res){
        done(err);
      });       
   });

и у меня есть 'TypeError: request.post не является функцией' Можете ли вы помочь мне с преобразованием в Supertest? И в то же время я все еще хочу использовать async / await

Ответы [ 3 ]

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

Хорошо, о вашей ошибке: вам нужно импортировать ваше приложение и передать его в качестве параметра для запроса, например:

request(app).post(...

Теперь об асинхронном ожидании: вот как должен выглядеть ваш код

it('should add address supertest', async () => {
  const res = await request(app)
    .post('/rest/v1/address/')
    .set(config.headers)
    //.set('Accept', 'application/json')
    .set('Authorization', 'Bearer ' + auth_token)    
    .send({
      "name": generatedAddressName,
      "city": "WARSZAWA",
      "street": "UL. KASPROWICZA",
      "houseNumber": "51",
      "apartNumber": "",
      "lat": 52.176903,
      "lng": 21.028369,
      "zipCode": "02-732",
      "isDefault": false,
      "inDeliveryZone": true
    })

  expect(res.statusCode).to.equal(200);
});

Редактировать: отметьте это в супер-документации

Blockquote. Вы можете передать запрос http.Server или Function () - если сервер еще не прослушивает соединения, он привязан к эфемерному порту для вас, поэтому нет необходимости отслеживать порты.

Я не думаю, что передача URL в request () будет работать

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

@ iagowp Я написал код, как в вашем примере, и он бросает меня

  1) 0_auth
       should return token for unauthorized user:
     Error: incorrect header check
      at Unzip.zlibOnError (zlib.js:153:15)

const chai = require('chai');
//const request = require('request-promise-native');
const mocha = require('mocha');
const config = require('../config');
const request = require('supertest');
const assert = chai.assert;
auth_token = '';


describe('0_auth', () => {
    it('should return token for unauthorized user', async () => {
    const res = await request(url)
      .post('/rest/v1/auth/get-token')
      .set(config.headers)
      //.set('Accept', 'application/json')  
      .send({
          "deviceUuidSource": "DEVICE",
          "source" : "KIOSK_KFC",
          "deviceUuid" : "uniquedeviceuuid"
      })
      .end(function(err,res){
        assert.equal(res.status,200)
        assert.property(res.body, 'token')
        assert.isString(res.body.token)
        auth_token=res.body.token
        console.log('unathorized token: '+auth_token) 
        done(err);
      });    
      expect(res.statusCode).to.equal(200);   
   });


   it('should return token for authorized user', async () => {
    const res = await request(url)
      .post('/rest/v1/auth/with-password')
      .set(config.headers)
      .set('Authorization', 'Bearer ' + auth_token) 
      //.set('Accept', 'application/json')  
      .send({
        "email" : user,
        "password" : password
      })
      .end(function(err,res){
        assert.equal(res.status,200)
        assert.property(res.body,'token')
        assert.isString(res.body.token)
        assert.equal(res.body.user.email,user)
        assert.isFalse(res.body.user.locked)
        auth_token=res.body.token
        console.log('authorized token: '+auth_token) 
        done(err)
      });  
      expect(res.statusCode).to.equal(200);       
   });

});
0 голосов
/ 04 сентября 2018

не уверен, будет ли это работать, но должно быть:

it('should add address supertest', async function(done) {
 const res = await request
  .post('/rest/v1/address/')
  .set(config.headers)
  //.set('Accept', 'application/json')
  .set('Authorization', 'Bearer ' + auth_token)    
  .send({
    "name": generatedAddressName,
    "city": "WARSZAWA",
    "street": "UL. KASPROWICZA",
    "houseNumber": "51",
    "apartNumber": "",
    "lat": 52.176903,
    "lng": 21.028369,
    "zipCode": "02-732",
    "isDefault": false,
    "inDeliveryZone": true
  })
  .expect(200)
  .catch(done)   
 done()
});  

в https://github.com/visionmedia/supertest есть раздел, в котором говорится об обещаниях.

...