81、JavaScript Node mocha异步测试

mocha测试一个函数是非常简单的,但是,在JavaScript的世界中,更多的时候,我们编写的是异步代码,所以,我们需要用mocha测试异步函数。

 

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

  1. const fs = require('mz/fs');
  2. // a simple async function:
  3. module.exports = async () => {
  4. let expression = await fs.readFile('./data.txt', 'utf-8');
  5. let fn = new Function('return ' + expression);
  6. let r = fn();
  7. console.log(`Calculate: ${expression} = ${r}`);
  8. return r;
  9. };

 

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

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

 

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

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

 

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

 

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

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

  1. it('test sync function', function () {
  2. // TODO:
  3. assert(true);
  4. });

 

如果要测试异步函数,我们要传入的函数需要带一个参数,通常命名为done

  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. });
  9. });

 

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

 

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

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

 

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

  1. it('#async function', async () => {
  2. let r = await hello();
  3. assert.strictEqual(r, 15);
  4. });

 

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

 

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

async-test/

|

+- .vscode/

| |

| +- launch.json <-- VSCode 配置文件

|

+- hello.js <-- 待测试js文件

|

+- data.txt <-- 数据文件

|

+- test/ <-- 存放所有test

| |

| +- await-test.js <-- 异步测试

|

+- package.json <-- 项目描述文件

|

+- 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
  5. 1 passing (11ms)

 

第二种方法是在package.json中把script改为:

  1. "scripts": {
  2. "test""mocha"
  3. }

 

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

 

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

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

 

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

 

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

 

Node mocha异步测试

付杰
  • ¥ 149.0元
  • 市场价:299.0元
  • ¥ 398.0元
  • 市场价:498.0元
  • ¥ 89.0元
  • 市场价:129.0元
  • ¥ 99.0元
  • 市场价:129.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: