Search code examples
node.jschai

Getting UnhandledPromiseRejectionWarning while running testcase


I am writing test cases for my node js code but the test case is failing with errors. I do not have write access to the test scripts so I need to fix my nodejs code itself. I want to solve this using http module instead of express so this is my code.

This is my node js code:

var http = require('http');
const requestListener = function (req, res) {
    let url = req.url;
    let method = req.method;
    let valid = false;
    let ar = url.split("/");
    let id = 0;
    if(method == 'GET') {
        if(ar.length == 3) {
            valid = true;
        }
    }
    if(valid) {
        res.setHeader("Content-Type", "application/json");
        res.writeHead(200);
        res.end(`{"message": "Project found"}`);    
    } else {
        res.setHeader("Content-Type", "application/json");
        res.writeHead(404);
        res.end(`{"message": "Not Found"}`);    
    }
    return;
};
const host = 'localhost';
const port = 8000;
const server = http.createServer(requestListener);
server.listen(port, host, () => {
    console.log(`Server is running on http://${host}:${port}`);
});

This is my test code :

const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../index');
const Promise = require('bluebird');
const should = chai.should();

chai.use(chaiHttp);

describe('sample', () => {
    it('Should return 404 for wrong path', (done) => {
        chai.request(server)
            .get('/')
            .then(response => {
                response.status.should.eql(404);
                done()
            })
    });
    

When I run this test case I am getting error as :

    ✓ Should return 404 for wrong path

(node:7739) UnhandledPromiseRejectionWarning: AssertionError: expected 200 to deeply equal 400

    at /projects/test/index.spec.js:25:40

    at processTicksAndRejections (internal/process/task_queues.js:95:5)

(node:7739) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)

(node:7739) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

I see a tick mark on test case name ✓ which I am assuming as correct, but I still see errors printing on output.

How to fix this errors?

Also with postman tool I can see 404 status code and message :project not found as JSON format which is expected output for loalhost:8000/


Solution

  • The problem is the program is sending the wrong response message or status codes that is causing the test case to fail. Sending the correct status code and response message can fix the issue.