web-dev-qa-db-fra.com

Comment exécuter un seul test en utilisant Jest?

J'ai un test 'fonctionne avec des enfants imbriqués' dans le fichier fix-order-test.js.

L'exécution du ci-dessous exécute tous les tests du fichier.

jest fix-order-test

Comment puis-je exécuter un seul test? Ce qui suit ne fonctionne pas car il cherche un fichier de la regex spécifiée.

jest 'works with nested children'
146
vijayst

À partir de la ligne de commande, utilisez l'indicateur --testNamePattern ou -t.

jest -t 'fix-order-test'

Cela n'exécutera que les tests correspondant au modèle de nom de test que vous avez fourni. C'est dans le Jest docs .

Vous pouvez également exécuter des tests en mode de surveillance jest --watch, puis appuyer sur p filtrer les tests en tapant le nom du fichier de test ou t exécuter un seul nom de test.

242
Andreas Köberle

documentation de jest recommande ce qui suit:

Si un test échoue, l'une des premières choses à vérifier devrait être si le test échoue alors que c'est le seul test en cours d'exécution. En plaisantant il est simple d'exécuter un seul test - il suffit de modifier temporairement cette test commande à un test.only

test.only('this will be the only test that runs', () => {
  expect(true).toBe(false);
});
58
flaky

Comme mentionné dans d'autres réponses,test.only se contente de filtrer les autres tests du même fichier . Donc, les tests dans d'autres fichiers seront toujours exécutés. ????

Donc, pour exécuter un seul test, il existe deux approches:

Option 1: Si votre nom de test est unique, vous pouvez entrer t en mode veille et entrer le nom du test que vous souhaitez exécuter.

Option 2:  

  1. Appuyez sur p en mode veille pour entrer une expression régulière pour le nom de fichier que vous souhaitez exécuter. (Les commandes pertinentes comme celle-ci sont affichées lorsque vous exécutez Jest en mode veille).
  2. Changez it en it.only sur le test que vous souhaitez exécuter.

Avec l’une des approches ci-dessus, Jest exécutera uniquement le test unique dans le fichier que vous avez spécifié. ????

27
Cory House

Vous pouvez également utiliser f ou x pour faire le point ou exclure un test. Par exemple

fit('only this test will run', () => {
   expect(true).toBe(false);
});

it('this test will not run', () => {
   expect(true).toBe(false);
});

xit('this test will be ignored', () => {
   expect(true).toBe(false);
});
9
Nima Soroush

Commande complète pour exécuter un seul test Jest

Commande:

node <path-to-jest> -i <you-test-file> -c <jest-config> -t "<test-block-name>"

  • <path-to-jest>:
    • Windows: node_modules\jest\bin\jest.js
    • Autres: node_modules/.bin/jest
  • -i <you-test-file>: chemin du fichier avec des tests (js ou ts)
  • -c <jest-config>: chemin d'accès à un fichier de configuration Jest (JSON) séparé, si vous conservez votre configuration Jest dans package.json, vous n'avez pas à spécifier ce paramètre (Jest le trouvera sans votre aide)
  • -t <the-name-of-test-block>: il s’agit en fait d’un nom (le premier paramètre) du bloc describe(...), it(...) ou test(...).

Exemple:

describe("math tests", () => {

  it("1 + 1 = 2", () => {
    expect(1 + 1).toBe(2);
  });

  it("-1 * -1 !== -1", () => {
    expect(-1 * -1).not.toBe(-1);
  });

});

Donc, la commande

node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t "1 + 1 = 2"

testera it("1 + 1 = 2", ...), mais si vous modifiez le paramètre -t en "math tests", il exécutera les deux tests à partir du bloc describe("math tests",...).

Remarques:

  1. Pour Windows, remplacez node_modules/.bin/jest par node_modules\jest\bin\jest.js.
  2. Cette approche vous permet de déboguer le script en cours d'exécution. Pour activer debugging , ajoutez le paramètre '--inspect-brk' à la commande.

Exécution d'un seul test Jest via des scripts NPM dans 'package.json'

Une fois Jest installé, vous pouvez simplifier la syntaxe de cette commande (ci-dessus) en utilisant les scripts NPM . Dans "package.json", ajoutez un nouveau script à la section "scripts":

"scripts": {
  "test:math": "jest -i test/my-tests.js -t \"math tests\"",
}

Dans ce cas, nous utilisons un alias 'jest' au lieu d’en écrire le chemin complet. De plus, nous ne spécifions pas le chemin du fichier de configuration car nous pouvons aussi le placer dans "package.json" et Jest le vérifiera par défaut. Maintenant, vous pouvez exécuter la commande:

npm run test:math

et le bloc "math tests" avec deux tests sera exécuté. Ou bien sûr, vous pouvez spécifier un test particulier par son nom.

Une autre option consisterait à extraire le paramètre <the-name-of-test-block> en dehors du script "test:math" et à le transmettre à partir de la commande NPM:

package.json:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t",
}

Commande:

npm run test:math "math tests"

Vous pouvez maintenant gérer le nom du ou des tests d’exécution avec une commande beaucoup plus courte.

Remarques:

  1. La commande 'jest' fonctionnera avec les scripts NPM car

    npm fait de "./node_modules/.bin" la première entrée de la variable d'environnement PATH lors de l'exécution de scripts de cycle de vie. Cela fonctionnera donc bien, même si votre programme n'est pas installé globalement ( blog NPM )

  2. Cette approche ne semble pas permettre le débogage, car Jest est exécuté via son binary/CLI, et non via node.

Exécution du test Jest sélectionné dans Visual Studio Code

Si vous utilisez du code Visual Studio, vous pouvez en tirer parti et exécuter le test actuellement sélectionné (dans l'éditeur de code) en appuyant sur le bouton F5. Pour ce faire, nous devrons créer un nouveau bloc de configuration launch dans le fichier ".vscode/launch.json". Dans cette configuration, nous allons utiliser variables prédéfinies qui sont remplacées par les valeurs appropriées (malheureusement pas toujours ) lors de l'exécution. Parmi tous les disponibles, nous ne sommes intéressés que par ceux-ci:

  • ${relativeFile} - le fichier ouvert en cours par rapport à ${workspaceFolder}
  • ${selectedText} - le texte actuellement sélectionné dans le fichier actif

Mais avant d’écrire la configuration de lancement, nous devrions ajouter le script 'test' dans notre 'package.json' (si nous ne l’avons pas encore).

package.json:

"scripts": {
  "test": "jest"
}

nous pourrons ensuite l’utiliser dans notre configuration de lancement.

Lancer la configuration:

{
  "type": "node",
  "request": "launch",
  "name": "Run selected Jest test",
  "runtimeExecutable": "npm",
  "runtimeArgs": [
    "run-script",
    "test"
  ],
  "args": [
    "--",
    "-i",
    "${relativeFile}",
    "-t",
    "${selectedText}"
  ],
  "console": "integratedTerminal",
}

il fait en réalité la même chose que les commandes décrites précédemment dans cette réponse. Maintenant que tout est prêt, nous pouvons exécuter tous les tests souhaités sans avoir à réécrire les paramètres de commande manuellement.

Voici tout ce que vous devez faire:

  1. Sélectionnez la configuration de lancement actuellement créée dans le panneau de débogage:

select launch config in the VSCode debug panel

  1. Ouvrez le fichier avec les tests dans l'éditeur de code et sélectionnez le nom du test que vous voulez tester (sans les guillemets):

select test name

  1. Appuyez sur le bouton 'F5'.

Et le tour est joué!

Maintenant, pour lancer un test, ouvrez-le simplement dans l'éditeur, sélectionnez son nom et appuyez sur F5.

Malheureusement, il ne sera pas "voila" sur les machines Windows car elles substituent (qui sait pourquoi) la variable ${relativeFile} au chemin ayant des barres obliques inversées et Jest ne comprendrait pas un tel chemin.

Remarques:

  1. Pour exécuter sous le débogueur, n'oubliez pas d'ajouter le paramètre '--inspect-brk'.
  2. Dans cet exemple de configuration, le paramètre de configuration Jest n'est pas supposé être inclus dans 'package.json'.
8
Sergey

Comme dit ci-dessus, vous pouvez exécuter la commande

jest -t 'fix-order-test'

Si vous avez une it dans un bloc describe, vous devez exécuter

jest -t '<describeString> <itString>'
6
Wladimir Gramacho

avec latest jest version , vous pouvez utiliser l’une des méthodes suivantes pour n’exécuter qu’un seul test, identique pour la suite de tests.

it.only('test 1', () => {})

test.only('test 1', () => {})

fit('test 1', () => {})

jest 'test 1' peut aussi fonctionner si le nom du test est unique.

3
schrodinger's code

Dans VS Code, cela me permet de lancer/déboguer un seul test Jest, avec des points d'arrêt: https://github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests

Mon launch.json a ceci à l'intérieur:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Jest All",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["--runInBand"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Jest Current File",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["${relativeFile}"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    }
  ]
}

et ceci dans package.json:

  "scripts": {
    "test": "jest"
  }
  • Pour exécuter 1 test, dans ce test, remplacez test (ou it) par test.only (ou it.only). Pour exécuter 1 suite de tests (plusieurs tests), remplacez describe par describe.only.
  • Définissez les points d'arrêt si vous le souhaitez.
  • Dans VS Code, accédez à la vue de débogage (Maj + Cmd + D).
  • Dans le menu déroulant en haut, sélectionnez Jest Current File.
  • Cliquez sur la flèche verte pour exécuter ce test.
0
Raymond Gan

Voici ma prise:

./node_modules/.bin/jest --config test/jest-unit-config.json --runInBand src/components/OpenForm/OpenForm.spec.js -t 'show expanded'

Remarques:

  • ./node_modules/.bin/... est un moyen merveilleux d’accéder au binaire jest (ou mocha ou ...) installé localement et fourni avec le paquet installé localement. (Oui, dans vos scripts npm, vous pouvez jest sans rien auparavant, mais c'est pratique en ligne de commande ... (c'est également un bon début pour votre configuration de débogage, quel que soit le IDE que vous utilisez ...)
  • votre projet peut ne pas avoir un ensemble d'options de configuration. Mais si c’est le cas (consultez les scripts dans package.json), c’est ce dont vous avez besoin.
  • --runInBand - comme dit, je ne sais pas à propos de votre configuration, mais si vous vous concentrez sur le développement/la correction d'un seul test, vous ne voulez plutôt pas traiter avec des travailleurs Web ...
  • oui, vous pouvez donner le chemin complet et explicite à votre fichier
  • optionnellement, vous pouvez utiliser -t pour ne pas exécuter tous les tests de ce fichier, mais un seul (ici: celui qui a quelque chose dont le nom est "show expanded"). Le même effet peut être obtenu en collant .only() dans ce fichier.
0
Frank Nocke

Il existe maintenant un plugin Nice jest pour ce jest-watch-typeahead appelé, ce processus est beaucoup plus simple.

0
rivanov

Si vous avez jest exécuté en tant que commande de script, comme npm test, vous devez utiliser la commande suivante pour que cela fonctionne:

npm test -- -t "fix order test"
0