Unit testing code coverage for multer Node.js using Jest

Viewed 40

I am trying to cover the lines and functions for code coverage of the simple multer file in Node.js but I am not getting where I am going wrong.

Here is the file:

fileUpload.js

const express = require("express");
const multer = require("multer");
const path = require("path");

const storage = multer.diskStorage({
  destination: (req, file, callBack) => {
    callBack(null, "uploads");
  },
  filename: (req, file, callBack) => {
    callBack(null, `${file.originalname}`);
  },
});

const upload = multer({
  storage: storage,
  fileFilter: (req, file, cb) => {
    if (file.mimetype == "image/png" || file.mimetype == "image/jpg" || file.mimetype == "text/plain") {
      cb(null, true);
    } else {
      cb(null, false);
      return cb(new Error('Only .png, .jpg, .txt and .jpeg format allowed!'));
    }
  }
})
module.exports = {
  upload,
  express
};

fileUpload.test.js

const multer = require('multer')
const fileStorage = require("../file-storage");

jest.mock('multer', () => {
  const multer = () => ({
    diskStorage: () => {
      return {
        destination: (req, res, callBack) => {
          callBack(null, 'uploads')
        },
        filename: (req, res, callBack) => {
          req.body = {
            userName: 'testUser'
          }
          req.files = [{
            originalname: 'sample.name',
            mimetype: 'sample.type',
            path: 'sample.url',
            buffer: Buffer.from('whatever'), // this is required since `formData` needs access to the buffer
          }, ]
          return callBack()
        }
      }

    },
  })
  multer.diskStorage = () => jest.fn()
  return multer

})

describe('65317652', () => {
  const upload = fileStorage.upload
  it('should pass', () => {
    const storage = upload.diskStorage();
    const uploadData = multer({
      storage: storage
    });
    expect(uploadData).toBeTruthy();
  });
});

I have searched plenty of blogs but didn't find any proper solution.

enter image description here

How to cover those lines?

0 Answers
Related