2012-01-03 2 views
0

Я новичок в node.js и начал с создания небольшого веб-приложения, которое работает на порту 5000. Когда я попробовал этот URL-адрес, который работает в моем локальном (либо через браузер, либо через через curl), все работает отлично, и я возвращаю ответ. Но когда я попытался подключить его с клиентом HTTP, делая «BDD с помощью клятв», тест сломал и полученное сообщение былоNode.js ответ не определен при подключении с помощью http client

✗ 

    /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

ответ

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 как единственный параметр по-прежнему вызывает ошибку, как я упомянул выше.
Благодарим вас за поддержку.