2015-05-01 2 views
7

Learning TDD und mein erster einfacher Test für meine "Hello World" Serverantwort schlägt in Mocha fehl. Ich benutze Mocha.js, Superagent, & Expect.js.Mokka-Test: Uncaught TypeError: Kann Eigenschaft 'Status' von Null nicht lesen

Wenn ich curl -i localhost:8080, bekomme ich die richtige Antwort und Statuscode.

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 

Prüfregeln:

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"); 
}); 

Mokka Ausgabe:

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 

Ich habe versucht, dieses Problem zu googeln aber kein Glück herauszufinden, was Ich mache falsch.

+0

hat bemerkt jemand, dass() erwarten to.equal doesnt mehr funktionieren ??? und dass die Bibliotheksautoren diesen Mist nicht erwähnen ??? BTW hat sich von ".to.equal" zu ".toEqual" geändert. Ich bin überrascht, dass der Code dieses Kerls überhaupt funktioniert – enorl76

Antwort

10

Knoten Notation von Callbacks soll ersten Parameter Fehler haben.

Superagent folgt dieser Node-Richtlinie. Dies ist von 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 diese Zeile ändern

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

zu

request.get('localhost:8080').end(function(err, res){ 
+0

Das war das Problem @lkrnac - Test funktioniert jetzt. – metame

Verwandte Themen