web-dev-qa-db-fra.com

Avec Supertest, puis-je créer une demande alternative avec des en-têtes définis par défaut?

J'utilise Supertest avec Mocha pour tester une API développée avec Node JS.

Et je veux faire beaucoup de tests différents sur l'API. Avec presque tous, je dois redéfinir les en-têtes d'autorisation et de type de contenu (car l'API les requiert pour ce test).

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

Puis-je créer une demande alternative avec ces en-têtes définis par défaut?

29

Si je me souviens bien dans superagent on peut passer un hachage à régler

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

laissez-moi savoir si cela ne fonctionne pas avec supertest.

29
mpm

Vous pouvez utiliser une routine courante pour créer vos en-têtes "par défaut" en tant qu'objet et les transmettre à la demande:

//# 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;

Et maintenant dans votre 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
  })

})

En outre, si vous avez besoin que votre application obtienne cette valeur de jeton au moment de l'exécution (le plus probable), consultez cet article pour utiliser une valeur de jeton demandée qui est générée pour les tests: https://jaketrent.com/post/authenticated -supertest-tests /

10
enorl76

Vous pouvez utiliser la bibliothèque superagent-defaults comme suit:

installation

npm install --save-dev supertest superagent-defaults

usage

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

version

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