使用fs.existsSync..我无法将true作为输出..(已编辑)



在下面的代码中,我正在解压缩一个文件夹,并在解压缩后验证其中的文件。然而,我可以手动查看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

相关内容

  • 没有找到相关文章

最新更新