Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why my Supertest test that should be failing is passing?

I'm starting my project based on this repo: https://github.com/madhums/node-express-mongoose

The first thing I decided to do was write tests, so I went to the test file, and it looks something like this:

var mongoose = require('mongoose');
var should = require('should');
var request = require('supertest');
var app = require('../server');
var context = describe;
// other stuff you want to include for tests

before(function (done) {
  // clear db and other stuff
  done();
});

describe('Users', function () {
  describe('POST /users', function () {
    it('should create a user', function (done) {

      request(app)
      .post('/users')
      .field('name', 'foo')
      .field('email', 'foo')
      .field('password', 'foo')
      .expect('Content-Type', /json/)
      .expect(200)
      .end(function(err, res){
        console.log(err);
        if(err){
          console.log("error");
        }
        // console.log(res);
      });


      done();
    });
  });
});

after(function (done) {
  // do some stuff
  done();
});

I haven't actually created the route, so the test should be failing, and I even do get an error on .end, so any idea why is the test not failing?

My console shows me this when I run npm test

Express app started on port 3000


  Users
    POST /users
      ✓ should create a user
[Error: expected "Content-Type" matching /json/, got "text/html; charset=utf-8"]
error


  1 passing (653ms)
like image 778
iagowp Avatar asked Sep 01 '25 16:09

iagowp


1 Answers

The problem is that your test is asynchronous, but your code is synchronous. Specifically, the done() line is always called.

You need to move the done() line into the .end block, and add done(err) for the error case, like this:

.end(function(err, res){
    if(err){
        console.log("error");
        done(err);
    }
    else {
        console.log(res);
        done();
    }
});
like image 97
Joost Vunderink Avatar answered Sep 04 '25 17:09

Joost Vunderink