javascript - Mocha 抛出 "Resolution method is overspecified"

标签 javascript node.js mocha.js

我正在尝试编写一个简单的测试 -

describe("My test", function(){
  it("Succeed", function*(done){
    yield testFunc();
    done()
  })
})

function *testFunc(){
  console.log("Hey!")
}

请注意,我正在使用 co-mocha 以便我的生成器将被执行。

我得到的错误是 -

Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both.

现在,文档明确指出 -

when a test injects a callback function (suggesting asynchronous execution), calls it, and returns a Promise, Mocha will now throw an exception

https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#boom-breaking-changes

但是,我没有返回 Promise! 我正在注入(inject)作为回调的 done 函数,但我没有返回 Promise...产生 testFunc 不会返回 Promise。

那么,为什么这个测试会抛出错误?

谢谢

最佳答案

生成器 (function*) 或者更确切地说,它是隐式的协程创建包装器,很可能返回一个 promise 。我不太确定 co-mocha 在这里是如何工作的,但也许这会起作用:

describe("My test", function () {
  it("Succeed", function* () {
    yield testFunc();
    return;
  });
});

此处不需要返回,只是为了清楚起见而添加。

但您可能需要更改:

function *testFunc(){
  console.log("Hey!")
}

类似于:

let testFunc = co.wrap(function* () {
  console.log("Hey!");
});

让你的 yield 在上面的代码中工作。

如果您使用 co 协程,那么您的生成器应该产生 promise 。在这里,生成器产生运行生成器函数的结果,生成器函数本身返回生成器,而不是 promise 。

关于javascript - Mocha 抛出 "Resolution method is overspecified",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091932/

相关文章:

javascript - 用于删除 URL 第一部分中文本的书签

node.js - 无法从 M1 Mac 上的 Node 容器连接到 Mongo Docker 容器

javascript - 编译 mocha/chai 测试文件时,类型脚本抛出错误属性 'to' 在类型 'Matchers' 上不存在

node.js - 将存储对象所属对象与未创建的父对象序列化

javascript - 使用 UDP 的 Node.js 文件传输

mocha.js - sequelize 函数不会在 Mocha 中引发异常

node.js - Mocha 测试失败 "MongoError: server sockets closed"

javascript - jQuery - .text 返回 [Object Object] 而不是变量。

javascript - 如何在 Controller 中导入 Handlebars 模板并将其放置在另一个 Handlebars 模板中

javascript - 突出显示 html 表格中具有选定值的行