Hoppa till innehåll

Guide - Så gör du när du inte vill köra alla tester varje gång

Kursens uppgifter använder Vitest för enhetstester. Precis som med Jest kan du begränsa vilka tester som körs genom att filtrera på testnamn — praktiskt när du bara vill fokusera på en del av uppgiften i taget.

  1. Öppna package.json och lägg till skriptet "test:only": "vitest run -t" efter "test:run" (glöm inte att lägga till ett kommatecken efter det näst sista skriptet).

    {
    "name": "assignment-a2",
    "version": "1.2.0",
    "description": "1DV025 - Assignment A2",
    "type": "module",
    "main": "src/app.js",
    "scripts": {
    "start": "node src/app.js",
    "test": "vitest",
    "test:run": "vitest run",
    "test:only": "vitest run -t",
    "lint": "eslint ./src --cache",
    "lint:fix": "eslint ./src --cache --fix"
    },
    ...
  2. Spara package.json-filen.

  3. Kör alla tester med npm run test:run och studera resultatet. Varje misslyckat test listas med hela sin namnkedja, till exempel average > argument > exceptions > .... Det är dessa namnsegment — som average, argument och exceptions — som kan användas för att begränsa vilka tester som ska köras.

    > assignment-a2@1.2.0 test:run
    > vitest run
    RUN v4.1.7 /home/en999zz/kurser/1dv025/examination/assignment-a2
    ❯ test/statistics.test.js (70 tests | 10 failed) 45ms
    × passing anything but an array should throw TypeError with the custom message 'The passed argument is not an array.' 6ms
    × passing an empty array should throw Error with the custom message 'The passed array contains no elements.' 2ms
    × passing an array containing a value that is not of the type number should throw TypeError with the custom message 'The passed array may only contain valid numbers.' 2ms
    × passing an array containing the value Number.NaN should throw TypeError with the custom message 'The passed array may only contain valid numbers.' 1ms
    × passing [-2, 5, 1, 1, 5, 5, 2, -2, 2, -2] should return 1.5 1ms
    × passing [-42, -84, -2, -3] should return -32.75 0ms
    × passing anything but an array should throw TypeError with the custom message 'The passed argument is not an array.' 0ms
    ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 10 ⎯⎯⎯⎯⎯⎯⎯
    FAIL test/statistics.test.js > average > argument > exceptions > passing anything but an array should throw TypeError with the custom message 'The passed argument is not an array.'
    AssertionError: expected function to throw an error, but it didn't
    FAIL test/statistics.test.js > average > argument > exceptions > passing an empty array should throw Error with the custom message 'The passed array contains no elements.'
    AssertionError: expected function to throw an error, but it didn't
    FAIL test/statistics.test.js > average > return value > passing [-2, 5, 1, 1, 5, 5, 2, -2, 2, -2] should return 1.5
    AssertionError: expected undefined to be 1.5 // Object.is equality
    <OUTPUT OMITTED FOR CLARITY!>
    FAIL test/statistics.test.js > maximum > argument > exceptions > passing anything but an array should throw TypeError with the custom message 'The passed argument is not an array.'
    AssertionError: expected function to throw an error, but it didn't
    Test Files 1 failed (1)
    Tests 10 failed | 60 skipped (70)
    Start at 10:15:00
    Duration 1.2s
  4. För att köra testerna som har med average att göra kör skriptet test:only och skicka med "average" som ett argument.

    npm run test:only "average"

    Enbart de tester vars namnkedja innehåller average kommer att köras — resten räknas som skippade.

    > assignment-a2@1.2.0 test:only
    > vitest run -t average
    RUN v4.1.7 /home/en999zz/kurser/1dv025/examination/assignment-a2
    ❯ test/statistics.test.js (35 tests | 5 failed | 30 skipped) 22ms
    × passing anything but an array should throw TypeError with the custom message 'The passed argument is not an array.' 3ms
    × passing an empty array should throw Error with the custom message 'The passed array contains no elements.' 1ms
    × passing [-2, 5, 1, 1, 5, 5, 2, -2, 2, -2] should return 1.5 0ms
    ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 5 ⎯⎯⎯⎯⎯⎯⎯
    FAIL test/statistics.test.js > average > argument > exceptions > passing anything but an array should throw TypeError with the custom message 'The passed argument is not an array.'
    AssertionError: expected function to throw an error, but it didn't
    <OUTPUT OMITTED FOR CLARITY!>
    Test Files 1 failed (1)
    Tests 5 failed | 30 skipped (35)
    Start at 10:16:12
    Duration 0.9s
  5. Vill du istället köra testerna som återfinns under namnet maximum, och hoppa över alla andra, kör du skriptet test:only och skicka med "maximum" som ett argument.

    npm run test:only "maximum"
CCBY