gpt4 book ai didi

hapijs - 如何在实验室中测试异常?

转载 作者:行者123 更新时间:2023-12-04 15:33:30 26 4
gpt4 key购买 nike

我正在使用 lab 编写测试用例我想测试我的插件是否抛出异常。问题是,hapi 允许异常冒泡,同时还设置了对内部服务器错误 500 的响应,这导致我的测试失败。

我们可以测试这个响应 expect(res.statusCode).to.equal(500)但测试仍然会失败。

我不能使用 try/catch server.inject因为异常是异步抛出的。

如何使用实验室测试异常?

最佳答案

domain 捕获处理程序内部抛出的错误。在 request目的。您可以通过几种不同的方式测试它的存在。

我对这些想法中的任何一个都不是特别满意,但它们都有效。希望其他人知道更好的方法。

插件

exports.register = function (server, options, next) {

server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {

throw new Error('You should test for this');

reply();
}
});

next();
}

测试
describe('Getting the homepage', function () {

it('Throws an error', function (done) {

server.inject({url: '/'}, function (resp) {

var error = resp.request.response._error;

expect(error).to.be.an.instanceof(Error);
expect(error.message).to.equal('Uncaught error: You should test for this');
done();

});
});
});

备选

如果您不喜欢访问私有(private) _error 的想法属性(如上),您可以将监听器添加到 domain并自己将错误存储在请求中 object .
server.ext('onPreHandler', function (request, reply) {

request.domain.on('error', function (error) {
request.caughtError = error;
});

reply.continue();
});

测试
describe('Getting the homepage', function () {

it('Throws an error', function (done) {

server.inject({url: '/'}, function (resp) {

var error = resp.request.caughtError;

expect(error).to.be.an.instanceof(Error);
expect(error.message).to.equal('Uncaught error: You should test for this');
done();

});
});
});

关于hapijs - 如何在实验室中测试异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29002552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com