在下面的代码中,我正在解压缩一个文件夹,并在解压缩后验证其中的文件。然而,我可以手动查看mac中的文件,尽管代码我无法断言它。fs.existsSync
断言它为false。
const zipFilePath = path.join(zipDirPath, `webfontkit${params.tc}.zip`);
const unzipFolderPath = path.join(outDir, `webfontkit${params.tc}`);
// Execute request for kit API and save response zip files
await utils.executeRequestAndSaveReponseInFileSystem(params,
zipFilePath);
// Unzip the zip files downloaded
let unzipper = new DecompressZip( zipFilePath );
unzipper.extract({
path: unzipFolderPath
});
// await utils.unzipFolder(zipFilePath, unzipFolderPath);
//
// await expect(fs.existsSync(unzipFolderPath)).toEqual(true);
const kitname = await utils
.replaceDelimitter(params.body.kitName, ' ', '_');
const kitPath = path.join(unzipFolderPath, kitname);
console.log(kitPath);
// Verify kitpath and kitname exists
await expect(fs.existsSync(kitPath)).toEqual(true);
await expect(fs.existsSync(path.join(kitPath, `${kitname}.css`))).toEqual(true);
这是另一个基于目前反馈的版本:
static async unzipFolder(zipFilePath, unzipFolderPath) {
return new Promise((resolve, reject) => {
fs.createReadStream(zipFilePath)
.pipe(unzip.Extract({ path: unzipFolderPath }))
.on('close', () => {
resolve();
})
.on('error', (error) => {
reject(error);
});
});
}
await utils.unzipFolder(zipFilePath, unzipFolderPath);
await expect(fs.existsSync(unzipFolderPath)).toEqual(true);
const kitname = await utils
.replaceDelimitter(params.body.kitName, ' ', '_');
const kitPath = path.join(unzipFolderPath, kitname);
console.log(kitPath,'KITPATH');
console.log(kitname,'KITNAME');
await utils.getFile(unzipFolderPath,50000);
// Verify kitpath and kitname exists
await expect(fs.existsSync(kitPath)).toEqual(true);
await expect(fs.existsSync(path.join(kitPath, `${kitname}.css`))).toEqual(true);
您在解压操作完成之前很久就调用了fs.existsSync()
,因此文件还不存在。
如果您查看文档中所使用的库,则unzipper.extract()
是异步。当你调用它时,它只是开始操作,然后立即返回,稍后它就会结束。
您需要安装事件处理程序来查看实际完成的时间。文档中的代码显示:
unzipper.on('extract', function (log) {
console.log('Finished extracting');
expect(fs.existsSync(kitPath)).toEqual(true);
});
看看什么时候真正完成了解压缩。该回调的内部是您应该调用fs.existsSync()
的地方。
我试图制作一个可以在自己的系统上运行的可复制版本的代码。这是我的东西,效果很好。我使用了一些随机的ZIP文件,其中有一堆图像。我选择了其中一个图像的文件名,并将其编码到程序中,以测试它是否存在。
const fs = require('fs');
const unzipper = require('unzipper');
const path = require('path');
async function unzipFolder(zipFilePath, unzipFolderPath) {
return new Promise((resolve, reject) => {
fs.createReadStream(zipFilePath)
.pipe(unzipper.Extract({ path: unzipFolderPath }))
.on('close', resolve)
.on('error', reject);
});
}
async function run() {
const zipFilePath = "./test.zip"; // sample input zip file
const unzipFolderPath = "./unzip"; // directory to put unzipped contents into
await unzipFolder(zipFilePath, unzipFolderPath);
console.log("fs.existsSync(unzipFolderPath)", fs.existsSync(unzipFolderPath));
const testFileName = path.join(unzipFolderPath, "20200610_122443.jpg");
// Verify expected output file exists
console.log("fs.existsSync(testFileName)", fs.existsSync(testFileName));
}
run().then(result => {
console.log("success");
}).catch(err => {
console.log(err);
});
此代码有效。它生成以下输出:
fs.existsSync(unzipFolderPath) true
fs.existsSync(testFileName) true
success