Pol*_*uge 7 unit-testing node.js typescript jestjs nestjs
我正在使用 Nestjs 并编写了下面的函数,该函数从发布请求接收文件并将其保存在我的项目中的文件夹中。我的问题是我不确定如何测试on('error')分支。
函数到单元测试。
saveFile({ createReadStream, filename }: FileUpload): Promise<boolean> {
return new Promise(async (resolve, reject) => {
createReadStream().pipe(
createWriteStream(join(process.cwd(), `apps/mull-api/uploads/${filename}`))
.on('finish', () => resolve(true))
.on('error', () => {
console.log(createReadStream);
reject(false);
})
);
});
}
Run Code Online (Sandbox Code Playgroud)
我如何测试on('finish')分支
it('should save file', async () => {
const returnedFile = await service.saveFile(mockFile);
expect(returnedFile).toBe(true);
});
Run Code Online (Sandbox Code Playgroud)
这就是我的模拟文件的样子。我尝试提供一个名称为空的模拟文件,但它出错了。
export const mockFile: FileUpload = {
filename: 'zoro',
mimetype: 'image/jpeg',
encoding: '7bit',
createReadStream(): ReadStream {
return fs.createReadStream(join(process.cwd(), `apps/mull-api/uploads/mock-upload/zoro`));
},
};
Run Code Online (Sandbox Code Playgroud)
我们可以模拟createWriteStream,.on(\'finish\')并.on(\'error\')使用mockImplementation(). 并在mock实现函数中自行触发这两个事件。
模拟实现函数中的\'finish\'事件是;模拟实现函数中的事件是handler() => resolve(true)\'error\'handler() => reject(false);
查看模拟实现和下面的示例:
\nconst myMockFn = jest.fn(cb => cb(null, true));\n\nmyMockFn((err, val) => console.log(val));\n// > true\nRun Code Online (Sandbox Code Playgroud)\nindex.ts:
const myMockFn = jest.fn(cb => cb(null, true));\n\nmyMockFn((err, val) => console.log(val));\n// > true\nRun Code Online (Sandbox Code Playgroud)\nindex.test.ts:
import { createWriteStream, ReadStream } from \'fs\';\nimport { join } from \'path\';\n\nexport interface FileUpload {\n filename: string;\n mimetype: string;\n encoding: string;\n createReadStream(): ReadStream;\n}\n\nexport class FileService {\n public saveFile({ createReadStream, filename }: FileUpload): Promise<boolean> {\n return new Promise(async (resolve, reject) => {\n createReadStream().pipe(\n createWriteStream(join(process.cwd(), `apps/mull-api/uploads/${filename}`))\n .on(\'finish\', () => resolve(true))\n .on(\'error\', () => {\n reject(false);\n }),\n );\n });\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n单元测试结果:
\n PASS src/stackoverflow/64485251/index.test.ts (10.201s)\n 64485251\n \xe2\x9c\x93 should save file (6ms)\n \xe2\x9c\x93 should handle error if save file failed (3ms)\n\n----------|----------|----------|----------|----------|-------------------|\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |\n----------|----------|----------|----------|----------|-------------------|\nAll files | 100 | 100 | 100 | 100 | |\n index.ts | 100 | 100 | 100 | 100 | |\n----------|----------|----------|----------|----------|-------------------|\nTest Suites: 1 passed, 1 total\nTests: 2 passed, 2 total\nSnapshots: 0 total\nTime: 11.344s\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5953 次 |
| 最近记录: |