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 :(得分:0)
这里有一个通过套接字与自己交谈的过程。 server.js
建立一个侦听套接字上的请求并响应的服务,然后您的测试代码连接到该套接字并发出请求。现在,问题在于服务器端的调用堆栈和客户端的调用堆栈是完全不同的堆栈。 如果服务器抛出异常,则客户端无法捕获它。换句话说,request
调用不会因为lib.doSomething
的回调而引发异常。你可以轻而易举地检查回调是否引发了异常,但之后没有那么多。