I have a function which unzip a file form the directory. It's working fine
index.js
const unZip = async (zipFilePath, destDir) => {
await util.promisify(fs.mkdir)(destDir);
return new Promise((resolve, reject) => {
fs.createReadStream(zipFilePath)
.pipe(unzipper.Extract({ path: destDir }))
.on("close", () => resolve(destDir))
.on("error", (err) => {
console.log("Error inside unzip", err);
reject(err);
});
});
};
but for unit test i am using sinon
and ava
, where I am unable to pass the test case
here is the code
index.test.js
ava.beforeEach(() => {
// mockFs({
// 'fakeDir/fakeFile': mockFs.load('test/helpers/file/testFile.txt'),
// fakeFileContent: 'content here',
// });
sinon.stub(mockFs, 'createReadStream').returns({
pipe: sinon.stub().returns({
on: sinon.stub().returns({
on: sinon.stub().returns(),
}),
}),
});
});
ava.serial('unZip test', async (t) => {
const unzip = proxyquire('../../../src/helpers/file/unZip', {
fs: mockFs,
util: {},
unzipper: { Extract: () => Buffer.from([8, 6, 7, 5, 3, 0, 9]) },
});
const result = await unzip('fakeFileContent', 'fakeFileContent');
t.is(result, true);
});
it's giving me the error like this
unZip test
Rejected promise returned by test. Reason:
Error {
code: 'EEXIST',
errno: -17,
path: 'fakeFileContent',
syscall: 'mkdir',
message: 'EEXIST: file already exists, mkdir \'fakeFileContent\'',
}
Try this
index.test.js
const mockFs = {
createReadStream: function () {
return this;
},
mkdir: function (p, cb) {
cb(null, this);
},
pipe: function () {
return this;
},
on: function (param, cb) {
if (param === 'close') {
return cb();
}
if (param === 'error') {
return this;
}
},
};
ava.serial('unZip success', async (t) => {
const unzip = proxyquire('../../../src/helpers/file/unZip', {
fs: mockFs,
util: {},
unzipper: { Extract: () => Buffer.from([8, 6, 7, 5, 3, 0, 9]) },
});
const mockZipFilePath = '../file/testFile.txt';
const destinationFilePath = '../file';
const result = await unzip(mockZipFilePath, destinationFilePath);
t.is(result, destinationFilePath);
});