Node.js 使用Jest测试在节点API内进行的调用
我正在尝试在我的节点微服务上使用jest测试此路由。在启动我的微服务时,我需要检查另一台服务器是否处于活动状态。该函数正在工作,但我一直在用笑话测试它 以下是我的节点微服务的代码:Node.js 使用Jest测试在节点API内进行的调用,node.js,jestjs,supertest,Node.js,Jestjs,Supertest,我正在尝试在我的节点微服务上使用jest测试此路由。在启动我的微服务时,我需要检查另一台服务器是否处于活动状态。该函数正在工作,但我一直在用笑话测试它 以下是我的节点微服务的代码: app.get(/ping, (req, res) => { axios.get('server.com/health') .then(() => { res.sendStatus(200); }) .catch(() => {
app.get(/ping, (req, res) => {
axios.get('server.com/health')
.then(() => {
res.sendStatus(200);
})
.catch(() => {
res.sendStatus(503);
});
});
下面是我的测试服务器的代码:
import nock from 'nock';
import request from 'supertest';
describe('Liveness and Readiness', () => {
beforeEach(() => {
nock('server.com')
.get('/health')
.reply(200);
});
it('Microservice repond statut code 200 when requested on /ping ', () => {
microService.init();
return request(microService.start())
.get('/ping')
.expect(200);
});
我使用nock模拟我需要从中检查运行状况的服务器
我得到的错误是:
预期200“正常”,得到500“内部服务器错误”
如果没有健康检查代码(见下文),测试将通过
app.get(/ping, (req, res) => {
res.sendStatus(200);
});
即使没有nock(意味着它应该ping真正的服务器),我检查了它的live,它仍然不工作。看起来它甚至不尝试在测试中检查运行状况,即使它被嘲笑。我不知道下一步要检查什么才能使我的测试在这个特殊情况下工作
我也试过了,莫西翁也没有成功
我将感谢社区在这方面提供的任何帮助:)以下是解决方案:
app.js
:
从“express”导入express;
从“axios”导入axios;
常量app=express();
app.get('/ping',(请求,res)=>{
axios
.get(“/health”)
.然后(()=>{
res.sendStatus(200);
})
.catch((错误)=>{
res.sendStatus(503);
});
});
导出默认应用程序;
app.test.js
:
从“nock”导入nock;
从“supertest”导入请求;
从“axios”导入axios;
从“./app”导入应用程序;
开玩笑的unmack(“axios”);
常数主机http://server.com';
axios.defaults.baseURL=主机;
描述(‘活力和准备度’,()=>{
it('on/ping请求时微服务回复状态代码200',(完成)=>{
nock(主机)
.get(“/health”)
.答复(200);
请求(应用程序)
.get(“/ping”)
.预计(200,完成);
});
it('on/ping请求时微服务回复状态代码503',(完成)=>{
nock(主机)
.get(“/health”)
.答复(503);
请求(应用程序)
.get(“/ping”)
.预期(503,完成);
});
});
100%覆盖率的集成测试结果:
PASS src/stackoverflow/55302401/app.test.js
生气勃勃
✓ 请求on/ping时的微服务回复状态代码200(42毫秒)
✓ 请求on/ping时的微服务回复状态代码503(11ms)
----------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
----------|----------|----------|----------|----------|-------------------|
所有文件| 100 | 100 | 100 | 100 ||
app.js | 100 | 100 | 100 | 100 ||
----------|----------|----------|----------|----------|-------------------|
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:4.146s,估计9s
源代码:以下是解决方案:
app.js
:
从“express”导入express;
从“axios”导入axios;
常量app=express();
app.get('/ping',(请求,res)=>{
axios
.get(“/health”)
.然后(()=>{
res.sendStatus(200);
})
.catch((错误)=>{
res.sendStatus(503);
});
});
导出默认应用程序;
app.test.js
:
从“nock”导入nock;
从“supertest”导入请求;
从“axios”导入axios;
从“./app”导入应用程序;
开玩笑的unmack(“axios”);
常数主机http://server.com';
axios.defaults.baseURL=主机;
描述(‘活力和准备度’,()=>{
it('on/ping请求时微服务回复状态代码200',(完成)=>{
nock(主机)
.get(“/health”)
.答复(200);
请求(应用程序)
.get(“/ping”)
.预计(200,完成);
});
it('on/ping请求时微服务回复状态代码503',(完成)=>{
nock(主机)
.get(“/health”)
.答复(503);
请求(应用程序)
.get(“/ping”)
.预期(503,完成);
});
});
100%覆盖率的集成测试结果:
PASS src/stackoverflow/55302401/app.test.js
生气勃勃
✓ 请求on/ping时的微服务回复状态代码200(42毫秒)
✓ 请求on/ping时的微服务回复状态代码503(11ms)
----------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
----------|----------|----------|----------|----------|-------------------|
所有文件| 100 | 100 | 100 | 100 ||
app.js | 100 | 100 | 100 | 100 ||
----------|----------|----------|----------|----------|-------------------|
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:4.146s,估计9s
源代码: