当前位置: 首页 > 知识库问答 >
问题:

异步Mocha测试(使用Chai断言库)应失败,但标记为通过

凌智
2023-03-14

我已经使用mocha测试框架和chai断言库用TypeScript编写了一些测试(我对这三种测试都不熟悉),并看到抛出了一个错误,并且在下面的代码中调用了assert.fail()。不过,测试仍标记为通过。我很困惑为什么会发生这种情况,以及我是否在承诺上做错了什么。另外,如下所示,还有一个UnhandledPromiserEjectionWarning。我不明白为什么这被标记为未处理,因为我已经包括了一个catch块。我将非常感谢任何关于如何解决这个问题的建议,谢谢!

   User.all()
      .then((users) => {
        expect(users.length).to.equal(0);
        return User.create('test@test.email', '12345', 'test', true, true);
      })
      .then(() => {
        return User.all();
      })
      .then((users) => {
        expect(users.length).to.equal(1);
      })
      .catch((error) => {
        assert.fail();
      });

调试控制

 ✓ should create a new record
  with existing e-mail in the database
(node:29903) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): AssertionError: assert.fail()
(node:29903) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

null

调试控制台

共有1个答案

闻人哲茂
2023-03-14

正如Benjamin Gruenbaum在上面所说的,通过确保it块返回一个承诺来解决这个问题

it('should create a new record', () => {

   return User.all()
      .then((users) => {
        expect(users.length).to.equal(0);
        return User.create('test@test.email', '12345', 'test', true, true);
      })
      .then(() => {
        return User.all();
      })
      .then((users) => {
        expect(users.length).to.equal(1);
      })
     .catch((error) => {
       assert.fail();
     });
 });
 类似资料:
  • 因此,我试图测试当我用 将 存根拒绝时,异步函数是否抛出错误,但我得到的结果是,我的函数不是异步的,它不会抛出错误。 下面是我的 文件,其中的 : 测试: 我得到的错误是:1)主要 getFileFromS3应该是一个函数:AssertionError:[function:getS3File]应该是上下文中的asyncfunction.(testUnitMain.spec.js:28:27) 2)

  • 我正在使用JUnit和Apache Log4J来学习TDD和日志服务的最佳实践。我有一个类,它有一个方法,它将尝试连接到MySQL数据库并返回类型的对象。 我有一个类GenericTaskInterpreterTests,在这里我为这个方法(和其他方法)编写了测试用例。 在这个测试用例场景中,如何使用TestWatcher记录断言失败

  • 问题内容: 有没有一种方法可以快速测试这些中间件: 我发现的唯一中间件测试是: 这与上面提供的简单中间件(类似于使用回调测试基本功能)很好地配合使用,但是对于更复杂的中间件,我无法使其正常工作。可以测试这种中间件吗? 问题答案: 这里有一个简单的设置,你可以使用,使用和: 从那里,您可以为模式匹配等添加更多详细的测试。由于仅使用,因此不必模拟整个对象(由Express创建),而只需使用带有属性的简

  • 目标 建立一个 lesson7 项目,在其中编写代码,我们暂时命名为 vendor 根据下面的步骤,最终的项目结构应该长这样 这次我们测试的对象是上文提到的 fibonacci 函数 此函数的定义为 int fibonacci(int n) 当 n === 0 时,返回 0;n === 1时,返回 1; n > 1 时,返回 fibonacci(n) === fibonacci(n-1) + fi

  • 所以,我在测试一个依赖于事件发射器的组件。为此,我想出了一个解决方案,使用mocha+chai的承诺: 在控制台上,我得到了一个“unhandledPromiserEjectionWarning”,尽管reject函数正在被调用,因为它会立即显示消息“assertionError:Promise Error" (Node:25754)UnhandledPromiseRejectionWarning