我在Express和Supertest的Jest问题上只有一个创建用户的测试。如果数据库是干净的,则可以正常工作,但控制台将显示以下内容:
这使得posttest
撤消了所有迁移,而不执行。
完整的警告消息是:
测试运行一秒钟后,Jest没有退出。
这通常意味着您的测试中没有停止异步操作。考虑使用
--detectOpenHandles
运行Jest来解决此问题。
我尝试使用done()
,但是不仅挂起问题仍然存在,而且没有显示问题所在,就像没有done()
一样。即使是简单的总和断言也会使Jest挂死。
我没有什么可展示的,这是一个简单的测试,但有很多麻烦。也许您需要更多信息,this is the repository。
答案 0 :(得分:0)
这是一个最小的工作示例:
app.js
:
import express, { Router } from 'express';
class App {
constructor() {
this.server = express();
this.middlewares();
this.routes();
this.exceptions();
}
middlewares() {
this.server.use(express.json());
}
routes() {
const routes = new Router();
routes.post('/api/users', (req, res) => {
res.status(201).json({ user: {} });
});
this.server.use(routes);
}
exceptions() {
this.server.use(async (err, req, res, next) => {
return res.status(500).send(err);
});
}
}
export default new App().server;
app.test.js
:
import app from './app';
import request from 'supertest';
describe('User', () => {
it('Should create a new user', async () => {
const response = await request(app)
.post('/api/users')
.send({
first_name: 'Lorem',
last_name: 'Ipsum',
email: 'lorem@ipsum.com',
password: '12345678',
});
expect(response.status).toBe(201);
expect(response.body).toHaveProperty('user');
});
});
具有覆盖率报告的功能测试结果:
☁ jest-codelab [master] ⚡ npx jest --coverage --verbose /Users/ldu020/workspace/github.com/mrdulin/jest-codelab/src/stackoverflow/57897576/app.test.js
PASS src/stackoverflow/57897576/app.test.js
User
✓ Should create a new user (40ms)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 90 | 100 | 75 | 94.44 | |
app.js | 90 | 100 | 75 | 94.44 | 26 |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 4.617s
源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/57897576