test node framework javascript node.js express mocha supertest

javascript - node - Con Supertest, ¿puedo crear una solicitud alternativa con algunos encabezados establecidos de manera predeterminada?



mocha js (3)

Estoy usando Supertest con Mocha para probar una API desarrollada con Node JS.

Y quiero hacer un lót de diferentes pruebas en la API. Con casi todos tengo que volver a establecer encabezados de Autorización y Tipo de contenido (porque la API los requiere para esta prueba).

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

¿Puedo crear una solicitud alternativa con esos encabezados establecidos de manera predeterminada?


Puede usar los superagent-defaults la biblioteca superagent-defaults siguiente manera:

instalación

npm install --save-dev supertest superagent-defaults

uso

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

versión

  • supertest v3.0.0
  • valores por defecto de superagente v0.1.14

Puede usar una rutina común para construir sus encabezados "predeterminados" como un objeto y pasarlos a la solicitud:

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

Y ahora en tu 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 }) })

Además, si necesita que su aplicación obtenga ese valor de token en el tiempo de ejecución (lo más probable) consulte este artículo para usar un valor de token solicitado que se genera para las pruebas: https://jaketrent.com/post/authenticated-supertest-tests/


Si recuerdo correctamente en el superagente uno puede pasar un hash para establecer

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

avísame si no funciona con supertest.