2016-05-04 63 views
0

server.js兴农摩卡节点错误处理

var server = http.createServer(function(req, res) { 

    lib.doSomething(x, y, function(err, data) { 
     if (err) throw(err); 

     res.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     res.end(data); 
    }); 
}); 

serverTest.js

var request = require('request'); 
var server = require('server'); 

    it('throws error when doSomething returns err', function(done){ 

     var expected = 'testError'; 

     doSomething = sinon.stub(lib, 'doSomething', function(x, y, callback){ 
     callback(new Error(expected)); 
     }); 

     try{ 
     request(url, function(err, response, body){ 
      done(); 
     }); 
     } catch(e){ 
     expect(e).to.equal(expected); 
     }; 

    }); 

我走近这个单元测试方法很多,但每当我运行测试,我不断收到一个Uncaught Error: testError和测试失败。我环顾四周,发现没有运气。这个单元测试通过预期错误的最佳方法是什么?

+0

你在哪里提到'lib'来自serverTest.js? – idbehold

+0

对不起,应该有一个var lib = require('lib') – James

回答

0

你在这里得到的是一个通过套接字与自己对话的过程。 server.js建立一个服务,用于侦听套接字上的请求并作出响应,然后您的测试代码连接到该套接字并发出请求。现在,问题在于服务器端的调用堆栈和客户端的调用堆栈是完全不同的堆栈。 如果服务器引发异常,您的客户端无法捕获它。换句话说,您的request调用不会抛出异常,因为lib.doSomething的回调会。你可以平凡地检查回调抛出一个异常,但那么测试不是很多。

+0

我确实想过测试回调,但你说得对,它根本不会测试任何东西。我将如何更好地设计服务器和/或测试? – James