我正在尝试在我的节点微服务上测试此路由。在启动微服务时,我需要检查另一台服务器是否处于活动状态。该功能正在工作,但我一直在开玩笑地测试它。
这是我的节点微服务的代码:
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操作),我也检查了它的生命,但仍然无法正常工作。即使它被嘲笑,看起来它甚至都没有尝试检查测试的运行状况。我不知道接下来要检查什么才能使我的测试在这种情况下进行。
也尝试使用moxios也不成功。
对于社区对此提供的任何帮助,我将不胜感激:)
答案 0 :(得分:0)
这是解决方案:
app.js
:
import express from 'express';
import axios from 'axios';
const app = express();
app.get('/ping', (req, res) => {
axios
.get('/health')
.then(() => {
res.sendStatus(200);
})
.catch((err) => {
res.sendStatus(503);
});
});
export default app;
app.test.js
:
import nock from 'nock';
import request from 'supertest';
import axios from 'axios';
import app from './app';
jest.unmock('axios');
const host = 'http://server.com';
axios.defaults.baseURL = host;
describe('Liveness and Readiness', () => {
it('Microservice repond statut code 200 when requested on /ping ', (done) => {
nock(host)
.get('/health')
.reply(200);
request(app)
.get('/ping')
.expect(200, done);
});
it('Microservice repond statut code 503 when requested on /ping ', (done) => {
nock(host)
.get('/health')
.reply(503);
request(app)
.get('/ping')
.expect(503, done);
});
});
覆盖率100%的集成测试结果:
PASS src/stackoverflow/55302401/app.test.js
Liveness and Readiness
✓ Microservice repond statut code 200 when requested on /ping (42ms)
✓ Microservice repond statut code 503 when requested on /ping (11ms)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
app.js | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 4.146s, estimated 9s
源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/55302401