将异步的Mocha api测试转换为Supertest

问题描述 投票:0回答:3

我有以下问题,我开始编写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

javascript api testing mocha supertest
3个回答
0
投票

不确定这是否有效,但它应该是:

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有一节谈论承诺。


0
投票

好的,关于你的错误:你需要导入你的应用程序并将其作为参数传递给请求,如下所示:

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或一个函数来请求() - 如果服务器还没有监听连接,那么它就会绑定到一个临时端口,所以不需要跟踪端口。

我不认为传递request()的URL会起作用


0
投票

@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);       
   });

});
© www.soinside.com 2019 - 2024. All rights reserved.