2012-01-03 62 views
0

我是node.js的新手,并开始创建一个运行在端口5000的小型web应用程序。当我尝试使用在本地运行的此url(通过浏览器或通过卷曲),一切正常,我得到回应。但是当我试图同时做“BDD用誓言”将其与HTTP客户端连接,测试破了,结果消息是当使用http客户端连接时,Node.js响应未定义

✗ 

    /GET 
    ✗ should respond with 404 
    ***TypeError: Cannot read property 'status' of undefined*** 
    at ClientRequest.<anonymous> (/home/sunil/work/nodal_programs/subscription-engine-processor/sample-test.js:13:23) 
    at runTest (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows.js:132:26) 
    at EventEmitter.<anonymous> (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows.js:85:17) 
    at EventEmitter.<anonymous> (events.js:67:17) 
    at EventEmitter.emit (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows.js:236:24) 
    at /home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows/context.js:31:52 
    at ClientRequest.<anonymous> (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows/context.js:46:29) 
    at ClientRequest.<anonymous> (events.js:67:17) 
    at ClientRequest.emit (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows.js:236:24) 
    at HTTPParser.onIncoming (http.js:1225:11) 
✗ Errored » 1 errored (0.012s) 

这里的反应是不确定的。

body = "Not found"; 
response.writeHead(404, {'Content-Type': 'text/plain', 'Content-Length': body.length});  
response.end(body); 

这就是我在应用程序内的反应。我已经设置了标题内容类型和内容长度。 任何人都可以帮我解决什么可能是问题?

我写的誓言就是这个。

var http = require('http'), 
    vows = require('vows'), 
    assert = require('assert'); 

vows.describe("notification").addBatch({ 
    "/GET": { 
    topic: function() { 
    http.get({host: 'localhost', port: 1337, path: '/', method: 'GET'}, this.callback) ; 
    }, 
    'should respond with 404': function(e,res) { 
     assert.equal(res.status, 404); 
    } 
    } 
}).run(); 
+2

你能发布你的测试代码吗? – nicolaskruchten 2012-01-03 12:11:31

回答

1

尝试改变

'should respond with 404': function(e,res) { 
    assert.equal(res.status, 404); 
} 

'should respond with 404': function(res) { 
    assert.equal(res.status, 404); 
} 

根据该Node.js HTTP docs,所述http.request(因此http.get)回调不走err参数。

2

我在代码中做了一个改变,并尝试将响应作为第一个回调和错误的第一个参数。这对我有效。

'should respond with 404': function(res,e) { 
    assert.equal(res.status, 404); 
} 

然而,res是唯一的参数仍然会引起上面提到的错误。
感谢您的支持。

相关问题