学习TDD和我对“Hello World”服务器响应的第一个简单测试在Mocha中失败了.我正在使用Mocha.js,Superagent,& Expect.js.
当我卷曲-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
我试过谷歌搜索这个问题,但没有运气找出我做错了什么.
解决方法
回调的节点表示法是第一个参数错误.
Superagent遵循此节点策略.这是从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 });
所以改变这一行
request.get('localhost:8080').end(function(res){
至
request.get('localhost:8080').end(function(err,res){