javascript - 用于表达功能的模拟功能
问题描述
我有一个 server.js 文件,它有一个 app.get 函数。我想用“jest”来测试这个功能。我很难在下面编写 app.get 函数的模拟函数。
app.get('/api/getUser', (req, res) => {
res.json({
'email': req.email,
'name': req.username
});
});
解决方案
这是单元测试解决方案,此外,您可以使用supertest编写集成测试
server.js
:
const express = require('express');
const app = express();
app.get('/api/getUser', (req, res) => {
res.json({
email: req.email,
name: req.username,
});
});
server.test.js
:
const express = require('express');
jest.mock('express', () => {
const express = {
get: jest.fn(),
};
return jest.fn(() => express);
});
describe('60562419', () => {
it('should send json', () => {
const mApp = express();
const mReq = { email: 'example@gmail.com', username: 'jest' };
const mRes = { json: jest.fn() };
mApp.get.mockImplementationOnce((route, handler) => {
handler(mReq, mRes);
});
require('./server');
expect(express).toBeCalled();
expect(mApp.get).toBeCalledWith('/api/getUser', expect.any(Function));
expect(mRes.json).toBeCalledWith({ email: 'example@gmail.com', name: 'jest' });
});
});
覆盖率 100% 的单元测试结果:
PASS stackoverflow/60562419/server.test.js (9.939s)
60562419
✓ should send json (581ms)
-----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
server.js | 100 | 100 | 100 | 100 |
-----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 11.476s
推荐阅读
- flutter - 动态和有条件地将小部件添加到列表中
- python - matplotlib 等高线图中的条件函数变化
- javascript - 如果一个精灵完全在视图之外,它还会被渲染吗?
- pyspark - 使用 PySpark 而不使用窗口对来自 Kafka 的流数据执行滚动平均
- performance - Perl,如何让这个脚本更小、更快、更好、更强?
- java - 如何在新的独立泛型类中重用另一个文件中的代码?
- c# - Microsoft Forms 停靠在左上角。C#
- python - Selenium:如何从“find_elements”列表中单击单个项目
- react-native - 反应原生buttons.slice不是一个函数
- python - 何时在 multiprocessing.Pool 上使用 multiprocessing.Queue?什么时候需要使用 multiprocessing.Queue?