Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用Jest测试在节点API内进行的调用_Node.js_Jestjs_Supertest - Fatal编程技术网

Node.js 使用Jest测试在节点API内进行的调用

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(() => {

我正在尝试在我的节点微服务上使用jest测试此路由。在启动我的微服务时,我需要检查另一台服务器是否处于活动状态。该函数正在工作,但我一直在用笑话测试它

以下是我的节点微服务的代码:

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
源代码: