Mocha Test: Uncaught TypeError: Cannot read property 'status' of null

13,380

Node notation of callbacks is to have first parameter error.

Superagent is following this Node policy. This is from superagent github site:

request
  .post('/api/pet')
  .send({ name: 'Manny', species: 'cat' })
  .set('X-API-Key', 'foobar')
  .set('Accept', 'application/json')
  .end(function(err, res){
    // Calling the end function will send the request
  });

So change this line

request.get('localhost:8080').end(function(res){

to

request.get('localhost:8080').end(function(err, res){
Share:
13,380
metame
Author by

metame

I've always been interested in building things, whether with tech or ideas. Currently building with Java, Javascript, Typescript, Postgresql, RabbitMQ, and DynamoDB. Have worked with Python, Angular, React. Familiar with Clojure, Go, C#. Learning Haskell.

Updated on June 19, 2022

Comments

  • metame
    metame almost 2 years

    Learning TDD and my first simple test for my "Hello World" server response is failing in Mocha. I'm using Mocha.js, Superagent, & Expect.js.

    When I curl -i localhost:8080, I get the correct response and status code.

    HTTP/1.1 200 OK
    Content-Type: text/plain
    Date: Mon, 27 Apr 2015 17:55:36 GMT
    Connection: keep-alive
    Transfer-Encoding: chunked
    
    Hello World
    

    Test code:

    var request = require('superagent');
    var expect = require('expect.js');
    
    // Test structure
    describe('Suite one', function(){
        it("should get a response that contains World",function(done){
            request.get('localhost:8080').end(function(res){
                // TODO check that response is okay
                expect(res).to.exist;
                expect(res.status).to.equal(200);
                expect(res.body).to.contain('World');
                done();
            });
        });
    });
    

    Server code:

    var server = require('http').createServer(function(req, res){
        res.writeHead(200, {"Content-Type":"text/plain"});
        res.end('Hello World\n');
    });
    
    server.listen(8080, function(){
        console.log("Server listening at port 8080");
    });
    

    Mocha output:

      Suite one
        1) should get a response that contains World
    
    
      0 passing (110ms)
      1 failing
    
      1) Suite one should get a response that contains World:
         Uncaught TypeError: Cannot read property 'status' of null
          at test.js:10:23
          at _stream_readable.js:908:16
    

    I've tried googling this issue but no luck finding out what I'm doing wrong.