Jest: Autoriser l'écrasement de console.error/warn/log dans les tests

Créé le 31 mars 2017  ·  3Commentaires  ·  Source: facebook/jest


Vous souhaitez demander une fonctionnalité ou signaler un bug ?
caractéristique

Quel est le comportement actuel ?
En raison de BufferedConsole , il est impossible d'écraser console.error , console.log , console.warn et console.info .

Cas d'utilisation : nous aimerions pouvoir générer des erreurs et des échecs de tests console.error et console.warn .

Si le comportement actuel est un bogue, veuillez fournir les étapes à reproduire et soit une démo repl.it via https://repl.it/languages/jest ou un référentiel minimal sur GitHub que nous pouvons yarn install et yarn test .

Quel est le comportement attendu ?
Je m'attends à ce que si j'ajoute console.error = (message) => { throw new Error(message); }; (globalement, dans un test ou dans setupFiles/setupFramework), chaque fois que console.error est appelé dans un test, il génère une erreur et échoue à un test.

En réalité, rien ne se passe.

Veuillez fournir votre configuration Jest exacte et mentionner votre version Jest, node, yarn/npm et votre système d'exploitation.

N / A

Commentaire le plus utile

Utilisez la fonction moqueuse jest.fn() :

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

Tous les 3 commentaires

Utilisez la fonction moqueuse jest.fn() :

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

@thymikee Cela ne fonctionne pas non plus comme prévu, en utilisant un fichier de configuration global :

en "setupTestFrameworkScriptFile": "<rootDir>/tools/jest/setup-framework.js"

beforeEach(() => {
  console.error = jest.fn((error) => {
    throw new Error(error);
  });
});

A l'essai :

const somePromiseThatLogsConsoleError = () => {
  return new Promise((resolve, reject) => {
    console.error('foobar');
    resolve();
  });
});

it('test that has console.error', () => {
  return somePromiseThatLogsConsoleError().then(() => {
    expect(false).toBeTrue();
  });
});

je viens d'essayer et ça marche :

// test file
test('lol', () => {
  return new Promise((resolve) => {
    console.log('lol');
    resolve();
  });
});
// setup file
global.console.log = () => {
  throw new Error('hey!');
};

résultat:

 __tests__/test-test.js
  ✕ lol (3ms)

  ● lol

    hey!

      at CustomConsole.Object.<anonymous>.global.console.log (setup.js:2:9)
      at resolve (__tests__/test-test.js:3:13)
      at Object.<anonymous>.test (__tests__/test-test.js:2:10)
      at process._tickCallback (internal/process/next_tick.js:109:7)

Test Summary
 › Ran all tests.
 › 1 test failed, 0 tests passed (1 total in 1 test suite, run time 0.661s)
Cette page vous a été utile?
0 / 5 - 0 notes