Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
Mocha + Chai + NodeJS never fails while it should

Hello I just try to do some functional test with mocha + chai on nodeJS api and everytime I try something even if it's not what expected from test, the test seems to pass.

Here is my test code :

const server = require("../server");
const chai = require("chai");
const chaiHttp = require("chai-http");

chai.use(chaiHttp);

const expect = require("chai").expect;
const requester = chai.request(server);

describe("test user", function(){
    describe("get all", function(){
        it("should return all users and 400", function(){
            requester.get("/api/users")
            .then(function(res){
                console.log(res.status);
                expect(res).to.have.status(400);
            })
            .catch(function(err){
                throw(err);
            })
        })
    })
})

and this is what I get :

> backend@1.0.0 test
> mocha "tests/users.test.js"

App listening at http://:::4000


  test user
    get all
      ✔ should return all users and 400


  1 passing (13ms)

Successfully connected to MongoDB.
200

since I wait 400 and get 200 it should fail but it isn't.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

The problem is that you are testing a promise so your test is finished before the promise resolves (with either success or error). In order to make mocha wait for the promise you can do one of the following:

  1. Return the promise from the mocha it block
describe("test user", function(){
    describe("get all", function(){
        it("should return all users and 400", function(){
            return requester.get("/api/users")
            .catch(function(res){
                expect(res).to.have.status(400);
            })
        })
    })
})
  1. use async function and await the promise, then perform the expecations:
describe("test user", function(){
    describe("get all", function(){
        it("should return all users and 400", async function(){
            const res = await requester.get("/api/users")
            expect(res).to.have.status(400);
        })
    })
})

Here you can omit the catch clause since mocha will figure it out.

You can read more about testing async stuff in the official mocha docs.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!