Troubleshooting
UH oh, ¿algo salió mal? Utilice esta guía para resolver problemas con Jest.
Los tests están fallando y no sabes por qué #
Intente usar el soporte de depuración incorporado en Node.
Note: Debugging support with Jest only supports
node debug
; it does yet supportnode inspect
due to an upstream issue in nodejs/node#7583. Until the upstream issue is resolved, debugging with Node is not available when using Node v8.x. For more details, see facebook/jest#1652.
Coloque una instrucción debugger;
en cualquiera de sus tests, y luego, en el directorio de su proyecto, ejecute:
node --debug-brk ./node_modules/.bin/jest --runInBand [any other arguments here] or on Windows node --debug-brk ./node_modules/jest/bin/jest.js --runInBand [any other arguments here]
Esto ejecutará Jest en un proceso Node al que un depurador externo puede conectarse. Tenga en cuenta que el proceso se detendrá hasta que el depurador se haya conectado a él.
Por ejemplo, para conectar el depurador Node Inspector al proceso detenido, primero lo instalarías (si no lo tiene instalado ya):
npm install --global node-inspector
Entonces simplemente ejecútelo:
node-inspector
Esto mostrará un enlace que se puede abrir en Chrome. Después de abrir ese enlace, se mostrarán las herramientas para desarrolladores de Chrome y se establecerá un punto de interrupción en la primera línea del script de Jest CLI (esto se hace simplemente para darle tiempo a abrir las herramientas de desarrollador y evitar que Jest se ejecute antes de que tenga tiempo para hacerlo). Haga clic en el botón que se muestra como un botón de "reproducción" en el lado superior derecho de la pantalla para continuar la ejecución. Cuando Jest ejecuta el test que contiene la instrucción debugger
, la ejecución se detendrá y podrá examinar el ámbito actual y la pila de llamadas.
Nota: la opción del cli
--runInBand
asegura que Jest ejecute los tests en el mismo proceso en lugar generar procesos para tests individuales. Normalmente Jest paraleliza las ejecuciones de los tests a través de procesos, pero es difícil depurar muchos procesos al mismo tiempo.
Puede encontrar más información sobre depuración en Node aquí.
Problemas de caché #
The transform script was changed or babel was updated and the changes aren't being recognized by Jest?
Retry with --no-cache
. Jest caches transformed module files to speed up test execution. If you are using your own custom transformer, consider adding a getCacheKey
function to it: getCacheKey in Relay.
Promesas no resueltas #
Si una promesa no es resuelta totalmente, podría producirse el siguiente error:
- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.`
Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example global.Promise = require.requireActual('promise');
and/or consolidate the used Promise libraries to a single one.
If your test is long running, you may want to consider to increase the timeout by calling jest.setTimeout
jest.setTimeout(10000); // 10 second timeout
Problemas con Watchman #
Try running Jest with --no-watchman
or set the watchman
configuration option to false
.
Also see watchman troubleshooting.
Los tests son extremadamente lentos en Docker y/o en el servidor de integración continua (CI). #
While Jest is most of the time extremely fast on modern multi-core computers with fast SSDs, it may be slow on certain setups as our users have discovered.
Based on the findings, one way to mitigate this issue and improve the speed by up to 50% is to run tests sequentially.
In order to do this you can run tests in the same thread using --runInBand
:
# Using Jest CLI jest --runInBand # Using npm test (e.g. with create-react-app) npm test -- --runInBand
Another alternative to expediting test execution time on Continuous Integration Servers such as Travis-CI is to set the max worker pool to ~4. Specifically on Travis-CI, this can reduce test execution time in half. Note: The Travis CI free plan available for open source projects only includes 2 CPU cores.
# Using Jest CLI jest --maxWorkers=4 # Using npm test (e.g. with create-react-app) npm test -- --maxWorkers=4
Tests are slow when leveraging automocking #
Whether via automock: true
in config or lots of jest.mock('my-module')
calls in tests, automocking has a performance cost that can add up in large projects. The more dependencies a module has, the more work Jest has to do to mock it. Something that can offset this performance cost significantly is adding a code transformer that moves import
or require
calls from the top of a module, where they are always executed, down into the body of the module, where they are usually not executed. This can lower the number of modules Jest has to load when running your tests by a considerable amount.
To transform import
statements, there is babel-plugin-transform-inline-imports-commonjs, and to transform require
statements, there is Facebook's inline-requires
babel plugin, which is part of the babel-preset-fbjs
package.
Estoy usando npm3 y mis node_modules no se están cargando correctamente. #
Actualiza jest-cli
a 0.9.0
o superior.
I'm using babel and my unmocked imports aren't working? #
Actualiza jest-cli
a 0.9.0
o superior.
Explicación:
jest.dontMock('foo'); import foo from './foo';
In ES6, import statements get hoisted before all other
const foo = require('foo'); jest.dontMock('foo'); // Oops!
In Jest 0.9.0, a new API jest.unmock
was introduced. Together with a plugin for babel, this will now work properly when using babel-jest
:
jest.unmock('./foo'); // Use unmock! import foo from './foo'; // foo is not mocked!
See the Getting Started guide on how to enable babel support.
¿Actualicé a Jest 0.9.0 y ahora mis tests fallan? #
Jest actualmente usa Jasmine 2 por defecto. Debería ser sencillo actualizarlo usando la guía de actualización de Jasmine.
If you would like to continue using Jasmine 1, set the testRunner
config option to jasmine1
or pass --testRunner=jasmine1
as a command line option.
Problemas de compatibilidad #
Jest takes advantage of new features added to Node 4. Recomendamos que actualice a la última versión estable de Node. La versión mínima soportada es v4.0.0
. Las versiones 0.x.x
no son soportadas.
Still unresolved? #
Ver Ayuda.