javascript - 测试失败 - 多次调用 Mocha 的 done()

标签 javascript unit-testing callback mocha.js

我曾尝试查看具有类似错误的主题,但无法将这些解决方案纳入我的问题的上下文中。

当我尝试运行以下测试时(包含已测试的功能):

function myFunc(next, obj) {
  const pairs = {};
  obj.listing.forEach((element) => {
    if (element.x in pairs && pairs[element.x] !== element.y) {
      const err = new Error('This was not ok');
      next(err);
    } else {
      pairs[element.x] = element.y;
    }
  });
  next();
}

it('should fail as 9 has been changed to 5 in the second object of the listing', function (done) {
  const callback = (err) => {
    if (err && err instanceof Error && err.message === 'This was not ok') {
      // test passed, called with an Error arg
      done();
    } else {
      // force fail the test, the `err` is not what we expect it to be
      done(new Error('Assertion failed'));
    }
  }
  myFunc(callback, {
    "listing": [
      { "x": 5, "y": 9 },
      { "x": 5, "y": 11 }
    ]
  });
});

我得到这个错误: enter image description here 这是什么原因造成的,我该如何解决?

最佳答案

您需要在 myFuncif block 中添加一个 return 以便回调函数 next只被调用一次,实际上是主测试用例中的 done() 回调:

function myFunc(next, obj) {
  const pairs = {};
  obj.listing.forEach((element) => {
    if (element.x in pairs && pairs[element.x] !== element.y) {
      const err = new Error('This was not ok');
      return next(err);
    } else {
      pairs[element.x] = element.y;
    }
  });
  next();
}

关于javascript - 测试失败 - 多次调用 Mocha 的 done(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58638719/

相关文章:

javascript - jQuery:将匿名回调重写为命名函数

ruby-on-rails - Rails 4 - 将字符串转换为时间格式,除非格式已经正确

javascript - 如何将整数添加到二维数组项

javascript - 单击一个时隐藏具有相同类名的其他元素

javascript - 解析无法检索用户电子邮件

java - JMockit:显示有关缺少调用 1 错误的模糊错误消息

java - 使用 Mockito 模拟 Hibernate 的 SessionFactory 时测试失败

javascript - 为什么 Jest 单元测试被破坏了?

language-agnostic - "userdata pointer"的正确定义是什么?

javascript - html5 canvas删除垂直/水平线像素值