摩卡testing:未捕获TypeError:无法读取null的属性“状态”

学习TDD和我的“Hello World”服务器响应的第一个简单testing在Mocha中是失败的。 我正在使用Mocha.js,Superagent和Expect.js。

当我curl -i localhost:8080 ,我得到正确的响应和状态代码。

 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 

testing代码:

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

服务器代码:

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

摩卡输出:

  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 

我试着用Googlesearch这个问题,但没有运气发现我做错了什么。

callback的节点标记是第一个参数错误。

Superagent正在遵循这个Node策略。 这是来自superagent github网站 :

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

所以改变这一行

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

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