¿Ambos sirven para el mismo propósito? ¿Por qué se utilizan ambos en, por ejemplo, este tutorial https: //codeforgeek.com/2015/07/unit-testing-nodejs-application-using-mocha/?

Editar, mirando el siguiente código:

var supertest = require("supertest");
var should = require("should");

// This agent refers to PORT where program is runninng.

var server = supertest.agent("http://localhost:3000");

// UNIT test begin

describe("SAMPLE unit test",function(){

  // #1 should return home page

  it("should return home page",function(done){

    // calling home page api
    server
    .get("/")
    .expect("Content-type",/json/)
    .expect(200) // THis is HTTP response
    .end(function(err,res){
      // HTTP status should be 200
      res.status.should.equal(200);
      // Error key should be false.
      res.body.error.should.equal(false);
      done();
    });
  });

});

¿Es necesario tener

.expect(200)

Y

res.status.should.equal(200);

? ¿Cuál es la diferencia?

0
Charles Chen 26 jul. 2016 a las 05:06

2 respuestas

La mejor respuesta

La parte .expect(200) utiliza la función de supertest para verificar datos. la parte object.should.equal(value) está usando shouldJS para verificación.

Prefiero utilizar shouldJS en .end () porque me permite hacer un poco de manipulación de datos, pruebas, registro, etc., según sea necesario.

Tenga en cuenta lo siguiente de: https://www.npmjs.com/package/supertest

Si está utilizando el método .end (), las aserciones .expect () que fallan no se producirán; devolverán la aserción como un error a la devolución de llamada .end ().

Entonces, en el código de ejemplo que muestra arriba, si .expect("Content-type",/json/) o .expect(200) fallan, no hay nada en el .end () para detectarlo. Un mejor ejemplo sería:

var supertest = require("supertest");
var should = require("should");

// This agent refers to PORT where program is runninng.

var server = supertest.agent("http://localhost:3000");

// UNIT test begin

describe("SAMPLE unit test",function(){

  // #1 should return home page

  it("should return home page",function(done){

    // calling home page api
    server
      .get("/")
      .expect("Content-type",/json/)
      .expect(200) // THis is HTTP response
      .end(function(err,res){
        // NOTE: The .expect() failures are handled by err and is  
        //       properly passed to done. You may also add logging
        //       or other functionality here, as needed.
        if (err) {
            done(err);
        }

        // Error key should be false.
        res.body.error.should.equal(false);
        done();
      });
  });

});

Actualice para responder la pregunta en el comentario y proporcione una respuesta más bonita aquí:

Pregunta: ¿Hacer algo como .expect(200, done) detectaría el error entonces?

Respuesta: La respuesta corta es "Sí". En la misma página que cité anteriormente, tiene lo siguiente:

Aquí hay un ejemplo con mocha, observe cómo puede pasar hecho directamente a cualquiera de las llamadas .expect ():

describe('GET /user', function() { 
  it('respond with json', function(done) { 
    request(app) 
      .get('/user') 
      .set('Accept', 'application/json') 
      .expect('Content-Type', /json/) 
      .expect(200, done); 
  }); 
});
1
Machtyn 11 ago. 2016 a las 14:57

Técnicamente hablando, no hay diferencia y creo que deberías ceñirte a .expect(200) tal como sugieren los ejemplos de supertest: https: // github.com/visionmedia/supertest

0
Rafal Wiliński 26 jul. 2016 a las 08:58