Подтвердить что ты не робот

С Supertest, могу ли я создать альтернативный запрос с некоторыми заголовками, установленными по умолчанию?

Я использую Supertest с помощью Mocha для тестирования API, разработанного с помощью Node JS.

И я хочу сделать несколько тестов в API. Почти у всех из них я должен снова задать заголовки авторизации и Content-Type (потому что API требует их для этого теста).

it('Creation without an email address should fail and return error code 50040', function(done) {
  request
    .post('/mpl/entities')
    .set('Authorization', 'Token 1234567890') //set header for this test
    .set('Content-Type',  'application/json') //set header for this test
    .send({
      firstname: "test"
    })
    .expect('Content-Type', /json/)
    .expect(500)
    .expect(anErrorCode('50040'))
    .end(done);
});

it('Creation with a duplicate email address should fail and return error code 50086', function(done) {
  request
    .post('/mpl/entities')
    .set('Authorization', 'Token 1234567890') //<-- again
    .set('Content-Type',  'application/json') //<-- again, I'm getting tired
    .send({
      email: "[email protected]"
    })
    .expect('Content-Type', /json/)
    .expect(500)
    .expect(anErrorCode('50086'))
    .end(done);
});

Можно ли создать альтернативный запрос с установленными по умолчанию заголовками?

4b9b3361

Ответ 1

Если я правильно помню в суперагент, можно передать хэш, чтобы установить

.set({key:value,key2:value2})

сообщите мне, если он не работает с supertest.

Ответ 2

Вы можете использовать общую процедуру для создания своих "стандартных" заголовков в качестве объекта и передать их запросу:

//# file:config.js

var config = { 
  authorization: { "Authorization":"authvalue" }
}

// Content-Type left out because supertest will use Content-Type json when you use the appropriate method

module.exports = config;

И теперь в вашем test.js:

//# file:test.js

var request = require("supertest");
var config = require("./config");

request = request(config.baseUrl)
var commonHeaders = { "authorization":"TokenValueASDF" };

describe("testing", function() {
  it.should('present authorization header to server', function(done) {
    request.get('/someurl')
      .set(commonHeaders)
      .set({"X-TestSpecificHeader":"Value"})
      .expect(200,done) //if not authorized you'd get 401
  })

})

Кроме того, если вам нужно, чтобы ваше приложение получило это значение токена во время выполнения (скорее всего), см. эту статью для использования запрашиваемого значения токена, которое генерируется для тестов: https://jaketrent.com/post/authenticated-supertest-tests/

Ответ 3

Вы можете применить пакет superagent-defaults следующим образом:

Установка

npm install --save-dev supertest superagent-defaults

Использование

var defaults = require('superagent-defaults');
var supertest = require('supertest');

var request = defaults(supertest(app)); // or url

// set the default headers
request.set(commonHeaders);

// use as usually

версия

  • supertest v3.0.0
  • superagent-defaults v0.1.14