我们把上一节的工程复制一份,重命名为async-test,然后,把hello.js改造为异步函数:

    这个async函数通过读取data.txt的内容获取表达式,这样它就变成了异步。我们编写一个data.txt文件,内容如下:

    1. 1 + (2 + 4) * (9 - 2) / 3

    别忘了在package.json中添加依赖包:

    1. "dependencies": {
    2. "mz": "2.4.0"
    3. },

    紧接着,我们在test目录中添加一个await-test.js,测试hello.js的async函数。

    我们先看看mocha如何实现异步测试。

    如果要测试同步函数,我们传入无参数函数即可:

    1. it('test async function', function (done) {
    2. fs.readFile('filepath', function (err, data) {
    3. if (err) {
    4. done(err);
    5. } else {
    6. done();
    7. }
    8. });

    测试异步函数需要在函数内部手动调用done()表示测试成功,done(err)表示测试出错。

    对于用ES7的async编写的函数,我们可以这么写:

    1. (async function () {
    2. try {
    3. let r = await hello();
    4. assert.strictEqual(r, 15);
    5. done();
    6. } catch (err) {
    7. done(err);
    8. }
    9. })();
    10. });

    但是用try…catch太麻烦。还有一种更简单的写法,就是直接把async函数当成同步函数来测试:

    这么写异步测试,太简单了有木有!

    我们把上一个hello-test工程复制为async-test,结构如下:

    1. async-test/
    2. |
    3. +- .vscode/
    4. | |
    5. | +- launch.json <-- VSCode 配置文件
    6. |
    7. +- data.txt <-- 数据文件
    8. |
    9. +- test/ <-- 存放所有test
    10. | +- await-test.js <-- 异步测试
    11. |
    12. +- package.json <-- 项目描述文件
    13. |
    14. +- node_modules/ <-- npm安装的所有依赖包

    现在,在命令行窗口运行命令node_modules\mocha\bin\mocha,测试就可以正常执行:

    1. #async hello
    2. #asyncCalculate()
    3. Calculate: 1 + (2 + 4) * (9 - 2) / 3 = 15
    4. #async function

    这样就可以在命令行窗口通过npm test执行测试。

    第三种方法是在VS Code配置文件中把program改为:

    1. "program": "${workspaceRoot}/node_modules/mocha/bin/mocha"

    这样就可以在VS Code中直接运行测试。

    编写异步代码时,我们要坚持使用和await关键字,这样,编写测试也同样简单。

    读后有收获可以支付宝请作者喝咖啡,读后有疑问请加微信群讨论:

    异步测试 - 图2