摩卡测试:未捕获的TypeError:无法读取null的属性“status”

时间:2015-05-01 02:25:14

标签: javascript node.js mocha superagent expect.js

学习TDD和我的“Hello World”服务器响应的第一个简单测试在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

测试代码:

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

我试过谷歌搜索这个问题,但没有运气找出我做错了什么。

1 个答案:

答案 0 :(得分:10)

回调的节点表示法是第一个参数错误。

Superagent遵循此节点策略。这来自superagent github site

<script type="text/javascript">
   jQuery(function($) {
   var path = window.location.href; // because the 'href' property of the DOM element is the absolute path

   $('ul a').each(function() { 
      if (this.href === path) {
          $(this).addClass('sub-menu active');
          $(this).parent().closest("li").addClass('active'); //added this line to include the parent
          $(this).parent().parent().closest("li").addClass('active');
      }
   });
}); 
</script>

所以改变这一行

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){