如何解决如何在javascipt中使用mocha断言验证文件下载
我有一个异步函数 downloadFile(),它接受文件的给定名称并将其保存在项目目录中。它在'savefile.js'中定义
我正在尝试编写 mocha 测试以验证下载后文件是否存在于目录中。 但它失败了。文件正在正确下载,但断言失败。似乎断言在文件可用之前执行。下载文件只需要几分之一秒(不明显)。我试图在这里使用“完成”,但出了点问题。
如果我在不删除之前下载的“testFile.dat”的情况下重新执行测试,则测试通过,这意味着断言在文件可用之前被调用,因此失败!
import assert from 'assert';
import {downloadFile} from './src/savefile.js';
import appRoot from 'app-root-path';
const fs = require('fs')
describe("save file",() => {
it("file should be saved",(done) => {
downloadFile('testFile.dat');
const f = appRoot.resolve('testFile.dat');
console.log(f);
assert(fs.existsSync(f));
done();
});
});
AssertionError [ERR_ASSERTION] [ERR_ASSERTION]: 未找到预期文件 E:\project\testFile.dat + 预期 - 实际
-false
+true
at Context.<anonymous> (E:/project/src/savefile.spec.js:14:9)
at processImmediate (internal/timers.js:456:21)
解决方法
移除 done 参数并使用 async
测试函数,这样您就可以await
downloadFile
结果:
it("file should be saved",async () => {
await downloadFile('testFile.dat'); // <-- await for the download
const f = appRoot.resolve('testFile.dat');
console.log(f);
assert(fs.existsSync(f));
});
说明
当您使用 done
作为参数时,mocha 需要拦截 done()
调用以将测试标记为已完成。当你避免使用这个参数时,mocha 会将该函数作为一个 promise 处理。见https://mochajs.org/#using-async-await
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。