javascript - tutorial - jest windows




Comment tester le type d'exception levée dans Jest (5)

En Jest, vous devez passer une fonction dans expect (fonction) .toThrow (blanc ou type d'erreur).

Exemple:

test("Test description", () => {
  const t = () => {
    throw new TypeError();
  };
  expect(t).toThrow(TypeError);
});

Si vous avez besoin de tester une fonction existante avec des arguments, vous devez l'envelopper dans une fonction anonyme dans expect ().

Exemple:

test("Test description", () => {
  expect(() => {http.get(yourUrl, yourCallbackFn)}).toThrow(TypeError);
});

Je travaille avec du code pour lequel j'ai besoin de tester le type d'exception levée par fonction (Est-ce que TypeError, ReferenceError, etc.).

Mon cadre de test actuel est AVA et je peux le tester en tant que second argument de la méthode t.throws , comme ici:

it('should throw Error with message \'UNKNOWN ERROR\' when no params were passed', (t) => {
  const error = t.throws(() => {
    throwError();
  }, TypeError);

  t.is(error.message, 'UNKNOWN ERROR');
});

J'ai commencé à réécrire mes tests en Jest et je ne trouvais pas comment le faire facilement. Est-ce même possible?


J'ai fini par écrire une méthode pratique pour notre bibliothèque de test-utils

/**
 *  Utility method to test for a specific error class and message in Jest
 * @param {fn, expectedErrorClass, expectedErrorMessage }
 * @example   failTest({
      fn: () => {
        return new MyObject({
          param: 'stuff'
        })
      },
      expectedErrorClass: MyError,
      expectedErrorMessage: 'stuff not yet implemented'
    })
 */
  failTest: ({ fn, expectedErrorClass, expectedErrorMessage }) => {
    try {
      fn()
      expect(true).toBeFalsy()
    } catch (err) {
      let isExpectedErr = err instanceof expectedErrorClass
      expect(isExpectedErr).toBeTruthy()
      expect(err.message).toBe(expectedErrorMessage)
    }
  }

Je n'ai pas essayé moi-même, mais je suggérerais d'utiliser l'assertion de Jest's toThrow . Je suppose donc que votre exemple ressemblerait à quelque chose comme ceci:

it('should throw Error with message \'UNKNOWN ERROR\' when no params were passed', (t) => {
  const error = t.throws(() => {
    throwError();
  }, TypeError);

  expect(t).toThrowError('UNKNOWN ERROR');
  //or
  expect(t).toThrowError(TypeError);
});

Encore une fois, je ne l'ai pas testé mais je pense que cela devrait fonctionner.

Faites-moi savoir si cela a aidé.

Bonne codage!


Jest a une méthode toThrow(error) pour vérifier qu’une fonction lève lorsqu’elle est appelée.

Donc, dans votre cas, vous devriez l'appeler ainsi:

expect(t).toThrowError(TypeError);

toThrow


essayer
expect(t).rejects.toThrow()





jestjs