Reputation: 211
I have below method in my controller. How can I test it? Annotation coverage is failing. Actually I am not able to define code for coverage in jest file.
What parameter I should add in my test file and pass to cover it?
@Post('upload')
@UseInterceptors(
FileInterceptor('image', {
storage: diskStorage({
destination: './uploads',
filename(_, file, callback) {
const randomName = Array(32)
.fill(null)
.map(() => Math.round(Math.random() * 16).toString(16))
.join('');
return callback(null, `${randomName}${extname(file.originalname)}`);
},
}),
})
)
uploadFile(@UploadedFile() file) {
return {
url: `http://localhost:2300/api/inventory/uploads/${file.filename}`,
originalFileName: `${file.originalname}`,
};
}
It is working perfectly. I wrote this jest test case for same.
it('Single file upload', async () => {
const response = await controller.uploadFile(mockFile);
const fileService = new InventoryController(service);
expect(response).toBeTruthy();
expect(response).toStrictEqual(
expect.objectContaining({
originalFileName: expect.any(String),
url: expect.any(String),
}),
);
});
This is successful but coverage is failing for this line.
@UseInterceptors(
FileInterceptor('image', {
storage: diskStorage({
destination: './uploads',
filename(_, file, callback) {
const randomName = Array(32)
.fill(null)
.map(() => Math.round(Math.random() * 16).toString(16))
.join('');
return callback(null, `${randomName}${extname(file.originalname)}`);
},
}),
})
)
Upvotes: 0
Views: 336
Reputation: 70570
What I would do here if code coverage is an absolute must on all lines with unit tests, is move the filename
function to a separate file that exports the method so it can be tested directly.
During unit tests, enhancers aren't called, only created, so you won't get any coverage other than the initial "yeah, this decorator works" kind of coverage. For this inner callback, you'll need a separate function.
The other option, if code coverage isn't as important a metric, would be to test this in an e2e test. That way you know for certain this works as intended
Upvotes: 1