javascript - 如何模拟构造函数的链式函数的返回值?
问题描述
我需要使用 jest 来模拟 csvJsonArray 的值
const csv = require('csvtojson')
const csvJsonArray = await csv().fromFile(csvFilePath)
我试过以下
jest.mock('csvtojson', () => jest.fn())
const fromFile = jest.fn().mockReturnValue(commTemplateCsvJsonArray)
csv.mockImplementation(() => ({fromFile}))
但这里 csvJsonArray 值为 null
如何模拟构造函数的链式函数的返回值?
解决方案
由于csv().fromFile()
方法的返回值是 a promise
,您应该使用mockFn.mockResolvedValue(value)模拟解析的值。
例如
main.js
:
const csv = require('csvtojson');
async function main() {
const csvFilePath = './test.csv';
const csvJsonArray = await csv().fromFile(csvFilePath);
return csvJsonArray;
}
module.exports = { main };
main.test.js
:
const { main } = require('./main');
const csv = require('csvtojson');
jest.mock('csvtojson');
describe('65620607', () => {
it('should pass', async () => {
const commTemplateCsvJsonArray = [1, 2, 3];
const fromFile = jest.fn().mockResolvedValue(commTemplateCsvJsonArray);
csv.mockImplementation(() => ({ fromFile }));
const actual = await main();
expect(actual).toEqual([1, 2, 3]);
expect(csv).toBeCalledTimes(1);
expect(fromFile).toBeCalledWith('./test.csv');
});
});
单元测试结果:
PASS examples/65620607/main.test.js
65620607
✓ should pass (4 ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
main.js | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 5.705 s
推荐阅读
- java - Spring @Autowired 在某些类中不起作用
- php - 我有从 0 到 99 的 wav 文件,在连接时使它们听起来不错的最佳逻辑是什么?
- python - 使用 os.system 打开记事本文件会出现错误“系统找不到指定的路径”
- python - Python 3 中的 urllib 没有给我变音
- intellij-idea - IntelliJ 社区版中的 Jinja 格式
- javascript - 单击电影卡时无法打开电影详细信息
- google-cloud-platform - GCP 混合连接:从客户路由器 ping 到 VPC
- html5-video - 在资源受限的环境中禁用背景视频
- sql - 需要使用 SQL 按类别中的前 25 个国家/地区列出国家/地区
- excel - 在 Excel 中添加时间码