node.js - Asynkron Mocha-test (med Chai påståendebibliotek) borde misslyckas, men är markerad som godkänd


Jag har skrivit några tester i TypeScript med hjälp av testframeworket Mocha och assertionsbiblioteket Chai (jag är ny på alla tre), och såg att ett fel kastades och assert.fail() anropades i koden nedan. Testet markeras dock fortfarande som godkänt. Jag är förvirrad över varför det skulle hända och om jag gör något fel med promises. Dessutom, som visas nedan, finns det en UnhandledPromiseRejectionWarning. Jag förstår inte varför detta markeras som ohanterat eftersom jag har inkluderat en catch-block. Jag skulle uppskatta råd om hur man löser detta, tack!

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

DEBUGKONSOL

 ✓ 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.

Kod

Felsökningskonsol

Svar #1

Som Benjamin Gruenbaum sa ovan, åtgärdades detta genom att se till att it-blocket returnerar ett löfte

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

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