尝试在 mocha 中使用 async/await

Posted

技术标签:

【中文标题】尝试在 mocha 中使用 async/await【英文标题】:Trying to use async/await in mocha 【发布时间】:2017-07-19 12:04:01 【问题描述】:

我想在 mocha 中使用 async/await 来进行测试。我已经阅读了很多帖子,但我没有找到解决方案。我已经安装了所有的 babel 模块来编译代码,但是它不起作用。

这是我在“test”文件夹中的代码:

import test from 'mocha'
import 'babel-polyfill'
import  expect  from 'chai'
import  assert  from 'chai'
import utils from '../lib/utils'

describe('long number', function () 
  it("Sample", mochaAsync(async () => 
    var x = utils.longNums(0);
    expect(x).to.equal(5000);
  ))
)

这是我的 package.json,我在其中使用了我必须安装的所有 babel 依赖项和插件,以及我建议 mocha 使用 babel 转译的测试脚本

   
     "name": "pos_lisa-test",
     "version": "1.0.0",
     "description": "pos lisa test",
     "main": "index.js",
     "scripts": 
       "test": "mocha --compilers js:babel-core/register ./src/**/*.test.js"
     ,
     "standard": 
       "parser": "babel-eslint"
     ,
     "babel": 
       "presets": [
         "es2015",
         "react"
       ]
     ,
     "keywords": [
       "test"
     ],
     "author": "Mauricio",
     "license": "MIT",
     "devDependencies": 
       "babel-core": "^6.23.1",
       "babel-eslint": "^7.1.1",
       "babel-plugin-transform-async-to-generator": "^6.22.0",
       "babel-preset-es2015": "^6.22.0",
       "babel-preset-react": "^6.23.0",
       "chai": "^3.5.0",
       "mocha": "^3.2.0",
     ,
     "plugins": [
       "transform-async-to-generator"
     ],
     "dependencies": 
       "babel-polyfill": "^6.23.0"
     
   

我得到的错误如下

it('should remove items that don\'t evaluate to true when passed to predicate function', async function () 
                                                                                           ^^^^^
SyntaxError: missing ) after argument list

我做错了什么?提前非常感谢您的帮助

【问题讨论】:

什么是 Babel 配置?它不会因为您安装了它而应用异步转换。 【参考方案1】:

您已将"plugins": ["transform-async-to-generator"]" 添加到package.json 的顶层,但它应该在"babel" 部分内。将其更改为:

"babel": 
  "presets": [
    "es2015",
    "react"
  ],
  "plugins": [
    "transform-async-to-generator"
  ]
,

【讨论】:

【参考方案2】:

根据javascript之道,“代码在瞬间流动,所以知识只是一个提示,就像一个流的地图。”

截至 2017 年 4 月,使用“transform-async-to-generator”实际上会导致问题。

一般来说,每个async 函数都会返回一个promise,或者将其返回值和异常转换为promise。测试 Promise 而不让你的测试调用 await 通常更干净:

it('should have no drops left', () => 
  ocean.listDrops().should.eventually.have.length(0));

【讨论】:

以上是关于尝试在 mocha 中使用 async/await的主要内容,如果未能解决你的问题,请参考以下文章

使用 async/await 进行异步 mocha 测试时遇到问题

在反应中使用 async/await 未定义

如何使用 async/await 处理错误?

Javascript 如何在 mysql 中使用 Async/Await

如何在 Gulp 4 中使用 async/await?

将 Async/Await 响应保存在变量上