जेस्ट का उपयोग करके मैं एक भी परीक्षण कैसे चला सकता हूं?


356

मेरे पास फ़ाइल फिक्स-ऑर्डर-टेस्ट.जेएस के भीतर एक परीक्षण 'नेस्टेड बच्चों के साथ काम करता है' है।

नीचे चल रहा है फ़ाइल में सभी परीक्षण चलाता है।

jest fix-order-test

मैं केवल एक ही परीक्षण कैसे चलाऊँ? नीचे काम नहीं करता है क्योंकि यह निर्दिष्ट रेगेक्स की एक फ़ाइल की खोज करता है।

jest 'works with nested children'


जब से jest कमांड लाइन का उपयोग कर रहे हैं, शायद --testNamePattern 'works with nested children' npm के
steven87vt

@BioGenX: लिंक अब टूट गया है
Dan Dascalescu

जवाबों:


429

कमांड लाइन से --testNamePatternया -tध्वज का उपयोग करें

jest -t 'fix-order-test'

यह केवल परीक्षण चलाएगा जो आपके द्वारा प्रदान किए गए परीक्षण नाम पैटर्न से मेल खाते हैं। यह जेस्ट डॉक्स में है

दूसरा तरीका यह है कि वॉच मोड में परीक्षण चलाएं jest --watchऔर फिर pपरीक्षण फ़ाइल नाम लिखकर या tएकल परीक्षण नाम चलाने के लिए परीक्षण फ़िल्टर करने के लिए दबाएं ।


यदि आपके पास itएक describeब्लॉक के अंदर है , तो आपको दौड़ना होगा

jest -t '<describeString> <itString>'

मुझे -t के लिए गैर-मान्यता प्राप्त विकल्प मिल रहे हैं। हाँ, प्रलेखन में इसका उल्लेख है। ध्वज को 16.0 में जोड़ा गया है। मैं नवीनतम संस्करण पर हूं। jest -help ध्वज का उल्लेख नहीं करता है। धन्यवाद।
vijayst

12
बस ध्यान दें कि यह it()फ़ंक्शन के अंदर विशिष्ट परीक्षण नाम के लिए परीक्षा पैटर्न है न कि फ़ाइल नाम। जो मैंने सोचा था।
हसिएनके

70
यदि npm परीक्षण का उपयोग करते हैं, तो आपको करने की आवश्यकता हैnpm test -- -t "fix order test"
सरसापैरिला

3
यह मेरे लिए काम करता है लेकिन यह परियोजना के हर एक अन्य परीक्षण को भी छोड़ देता है जो बड़ी परियोजनाओं के लिए धीमा है। एक विशिष्ट परीक्षण फ़ाइल निर्दिष्ट करना जो परीक्षण वास्तव में मदद करता है:./node_modules/.bin/jest --config=./.jest.config.json ./src/x/y/sites.js/sitesWorker.test.js -t 'given only incorrect sites'
anon58192932

W / o के साथ मेरे लिए काम करता है <DescriptionString> निर्दिष्ट करते हुए, मैंने देखा है कि यह मोचा के क्रेप (-g 'सर्चस्ट्रिंग') की तुलना में धीमा है - लेकिन मैं इसे ले
जाऊंगा

125

जेस्ट प्रलेखन निम्नलिखित की सिफारिश करता है:

यदि कोई परीक्षण विफल हो रहा है, तो जांच करने वाली पहली चीजों में से एक यह होना चाहिए कि क्या परीक्षण विफल हो रहा है जब यह एकमात्र परीक्षण है जो चलता है। जेस्ट में यह केवल एक परीक्षण चलाने के लिए सरल है - बस अस्थायी रूप से उस test कमांड को बदल देंtest.only

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

या

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

7
मेरे लिए jest 20.0.4 के साथ काम करता है। हालाँकि यह केवल उस फ़ाइल में बाकी परीक्षणों को छोड़ देता है। जब तक आप पहले से ही एक फ़ाइल में रन को प्रतिबंधित नहीं करते हैं, तब तक अन्य फ़ाइलों में टेस्ट चलते रहते हैं।
15

7
हालांकि यह एक घिनौना काम है - क्योंकि यह परीक्षण को अतुल्यकालिक रूप से चलाता है यह शायद यह निर्धारित नहीं कर सकता है कि कौन सी परीक्षा शुरू से किस फ़ाइल में चलनी चाहिए। तो यह डिफ़ॉल्ट रूप से सभी फ़ाइलों को चलाएगा और फ़ाइलों की जांच करेगा test.only। इसलिए यदि आप केवल एक परीक्षण के भीतर एक परीक्षण को चलाना चाहते हैं, जिसमें कई परीक्षण मामले हैं, तो एक परीक्षण के कई मामलों में जिसमें कई फाइलें हैं जो आपको दुर्भाग्यवश उस एकल फ़ाइल को चलाना हैjest myTestFile.test.js
परतदार

@johnslay: यह करता है, बस इसे परीक्षण किया
परतदार

@ क्लेकी मुझे लगता है कि मेरे कहने का मतलब यह है कि यह काम नहीं करता जब दौड़ रहा हो npm test। आपको फ़ाइल को स्वयं चलाना होगा या pफ़िल्टर सेट करने के लिए दबाना होगा।
जॉन्सले

3
@ जोंसले वेल, आपकी प्रतिक्रिया लिखने से पहले पिछली टिप्पणियों को पढ़ने के लिए धन्यवाद, मुझे लगता है कि मुझे लगता है :)
परतदार

55

जैसा कि अन्य उत्तरों में बताया गया है, test.onlyकेवल उसी फ़ाइल में अन्य परीक्षणों को फ़िल्टर करता है । तो अन्य फ़ाइलों में परीक्षण अभी भी चलेंगे।

इसलिए एकल परीक्षण चलाने के लिए, दो दृष्टिकोण हैं:

  • विकल्प 1: यदि आपका परीक्षण नाम अद्वितीय है, तो आप tवॉच मोड में प्रवेश कर सकते हैं और उस परीक्षण का नाम दर्ज कर सकते हैं जिसे आप चलाना चाहते हैं।

  • विकल्प 2:

    1. pवॉच मोड में हिट करें जबकि आप जिस फ़ाइलनाम को चलाना चाहते हैं, उसके लिए एक रेगेक्स दर्ज करें। (जब आप वॉच मोड में जेस्ट चलाते हैं तो इस तरह के प्रासंगिक कमांड प्रदर्शित होते हैं)।
    2. परिवर्तन it करने के लिए it.onlyपरीक्षण आप चलाना चाहते हैं पर।

ऊपर दिए गए किसी भी दृष्टिकोण के साथ, जेस्ट केवल आपके द्वारा निर्दिष्ट फ़ाइल में एकल परीक्षण चलाएगा।


54

एक भी जेस्ट परीक्षण चलाने के लिए पूर्ण आदेश

कमान:

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

  • <path-to-jest>:
    • खिड़कियाँ: node_modules\jest\bin\jest.js
    • अन्य: node_modules/.bin/jest
  • -i <you-test-file>: परीक्षण के साथ फ़ाइल का पथ ( jsया ts)
  • -c <jest-config>: एक अलग Jest config फाइल (JSON) के लिए पथ, यदि आप अपना Jest कॉन्फ़िगरेशन रखते हैं तो आपको package.jsonयह पैरामीटर निर्दिष्ट करने की आवश्यकता नहीं है (Jest इसे आपकी सहायता के बिना पाएगा)
  • -t <the-name-of-test-block>: वास्तव में इसके बारे में एक नाम (प्रथम पैरामीटर) है describe(...), it(...)या test(...)ब्लॉक।

उदाहरण:

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

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

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

});

तो, आज्ञा

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

परीक्षण करेगा it("1 + 1 = 2", ...), लेकिन यदि आप -tपैरामीटर बदलते हैं "math tests"तो यह describe("math tests",...)ब्लॉक से दोनों परीक्षण चलाएगा ।

टिप्पणियों:

  1. Windows के node_modules/.bin/jestसाथ बदलें node_modules\jest\bin\jest.js
  2. यह दृष्टिकोण आपको रनिंग स्क्रिप्ट को डीबग करने की अनुमति देता है। डिबगिंग को सक्षम '--inspect-brk'करने के लिए कमांड में पैरामीटर जोड़ें ।

'पैकेज.जॉन' में एनपीएम लिपियों के माध्यम से एक एकल जेस्ट परीक्षण चलाना

जेस्ट स्थापित होने से आप एनपीएम लिपियों का उपयोग करके इस कमांड के सिंटैक्स (ऊपर) को सरल बना सकते हैं । में "package.json"करने के लिए एक नई स्क्रिप्ट जोड़ने "scripts"अनुभाग:

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

इस मामले में, हम 'jest'इसके लिए पूरा रास्ता लिखने के बजाय एक उपनाम का उपयोग करते हैं। इसके अलावा, हम कॉन्फ़िगर फ़ाइल पथ को निर्दिष्ट नहीं करते हैं क्योंकि हम इसे "package.json"अच्छी तरह से रख सकते हैं और जेस्ट डिफ़ॉल्ट रूप से इसमें दिखाई देगा। अब आप कमांड चला सकते हैं:

npm run test:math

और "math tests"दो परीक्षणों के साथ ब्लॉक निष्पादित किया जाएगा। या, ज़ाहिर है, आप इसके नाम से एक विशेष परीक्षण निर्दिष्ट कर सकते हैं।

एक अन्य विकल्प स्क्रिप्ट के <the-name-of-test-block>बाहर पैरामीटर खींचना "test:math"और इसे एनपीएम कमांड से पास करना होगा:

package.json:

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

कमान:

npm run test:math "math tests"

अब आप बहुत कम कमांड के साथ रन टेस्ट (एस) के नाम का प्रबंधन कर सकते हैं।

टिप्पणियों:

  1. 'jest'आदेश NPM लिपियों क्योंकि के साथ काम करेंगे

    NPM बनाता "./node_modules/.bin"में पहली प्रविष्टि PATHजब किसी भी जीवन चक्र स्क्रिप्ट चला, तो यह इच्छा काम ठीक है, भले ही अपने कार्यक्रम विश्व स्तर पर स्थापित नहीं है, वातावरण चर ( NPM ब्लॉग )

  2. यह दृष्टिकोण डिबगिंग की अनुमति नहीं देता है क्योंकि जेस्ट को इसके बाइनरी / सीएलआई के माध्यम से चलाया जाता है, इसके माध्यम से नहीं node

विजुअल स्टूडियो कोड में चयनित जेस्ट परीक्षण चल रहा है

यदि आप विज़ुअल स्टूडियो कोड का उपयोग कर रहे हैं तो आप इसका लाभ उठा सकते हैं और वर्तमान में चयनित कोड (कोड संपादक में) F5बटन दबाकर चला सकते हैं । ऐसा करने के लिए हमें फ़ाइल में एक नया लॉन्च कॉन्फ़िगरेशन ब्लॉक बनाना होगा ".vscode/launch.json"। उस कॉन्फ़िगरेशन में, हम पूर्वनिर्धारित चर का उपयोग करेंगे जो चलने पर उचित (दुर्भाग्य से हमेशा नहीं ) मूल्यों के साथ प्रतिस्थापित किए जाते हैं । सभी उपलब्ध में से हम केवल इन में रुचि रखते हैं:

  • ${relativeFile} - वर्तमान फ़ाइल के सापेक्ष खोला गया ${workspaceFolder}
  • ${selectedText} - सक्रिय फ़ाइल में वर्तमान चयनित पाठ

लेकिन लॉन्च कॉन्फिग लिखने से पहले हमें 'test'स्क्रिप्ट को अपने में जोड़ना चाहिए'package.json' (यदि हमारे पास अभी तक नहीं है)।

package.json:

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

तब हम इसे अपने लॉन्च कॉन्फिग में इस्तेमाल कर सकते हैं।

कॉन्फ़िगरेशन लॉन्च करें:

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

यह वास्तव में इस उत्तर में पहले बताई गई आज्ञाओं के समान है। अब जब सब कुछ तैयार हो गया है, तो हम कमांड मापदंडों को मैन्युअल रूप से फिर से लिखे बिना किसी भी परीक्षण को चला सकते हैं।

यहां आपको केवल इतना करना है:

  1. वर्तमान में डीबग पैनल में लॉन्च लॉन्च कॉन्‍फ़िगर चुनें:

VSCode डिबग पैनल में लॉन्च लॉन्च का चयन करें

  1. कोड एडिटर में परीक्षण के साथ फ़ाइल खोलें और उस परीक्षण का नाम चुनें जिसे आप परीक्षण करना चाहते हैं (उद्धरण चिह्नों के बिना):

परीक्षण नाम चुनें

  1. प्रेस 'F5'बटन।

और वोइला!

अब किसी भी परीक्षा को चलाने के लिए, जिसे आप संपादक में खोलना चाहते हैं, उसका नाम चुनें और F5 दबाएँ।

दुर्भाग्य से, यह विंडोज मशीनों पर "वॉइला" नहीं होगा क्योंकि वे स्थानापन्न करते हैं (जो जानता है कि क्यों) ${relativeFile}मार्ग के साथ चर उलट स्लैश होता है और जेस्ट इस तरह के पथ को नहीं समझेगा।

टिप्पणियों:

  1. डीबगर के नीचे चलाने के लिए जोड़ने के लिए मत भूलना '--inspect-brk' पैरामीटर ।
  2. इस कॉन्फ़िगरेशन उदाहरण में, हमारे पास जेस्ट कॉन्फ़िगरेशन पैरामीटर यह मानकर नहीं है कि यह इसमें शामिल है 'package.json'

1
अति उत्कृष्ट! यह स्वीकृत उत्तर होना चाहिए। खासकर अगर यह npxओएस की परवाह किए बिना जेस्ट को कॉल करने को बहुत सरल बनाने का उल्लेख करता है।
डैन डस्केल्सस्कु

19

आप परीक्षण का उपयोग fया xध्यान केंद्रित करने या बाहर करने के लिए भी कर सकते हैं । उदाहरण के लिए

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);
});

1
निश्चित नहीं है कि यह उत्तर क्यों अस्वीकृत किया गया था, यह प्रश्न और कार्यों का उत्तर देता है।
mbillard

1
xitमेरे लिए काम किया, लेकिन fitनहीं। मैं jest@22.4.4 का उपयोग कर रहा हूं।
हिनरिच

मुझे लगता है कि इस दृष्टिकोण का मुख्य नकारात्मक पक्ष यह है कि - यदि आप बग को ठीक करने के लिए केवल एक परीक्षण पर ड्रिल करने की कोशिश कर रहे हैं - यह अंतर्निहित परीक्षण फ़ाइलों में अनावश्यक परिवर्तन की आवश्यकता है। यदि, जो भी कारण से, आप परीक्षण कोड (कमिट्स में, कहना चाहते हैं) को बनाए रखना चाहते हैं तो यह समझ में आ सकता है।
वेबेलो

14

जैसा कि ऊपर कहा गया है, आप कमांड चला सकते हैं

jest -t 'fix-order-test'

यदि आपके पास itएक describeब्लॉक के अंदर है , तो आपको दौड़ना होगा

jest -t '<describeString> <itString>'

13

यदि आपके पास jestस्क्रिप्ट कमांड के रूप में चल रहा है, तो कुछ npm test, आपको इसे काम करने के लिए निम्न कमांड का उपयोग करने की आवश्यकता है:

npm test -- -t "fix order test"

8

साथ नवीनतम हंसी संस्करण , आप एक परीक्षण, परीक्षण सुइट के लिए एक ही केवल चलाने के लिए निम्न में से एक का उपयोग कर सकते हैं।

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

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

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

jest 'test 1' परीक्षण नाम अद्वितीय होने पर भी काम कर सकता है।


4

VS कोड में, यह मुझे केवल 1 जेस्ट टेस्ट चलाने / डिबग करने देता है, ब्रेकप्वाइंट के साथ: https://github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests

मेरा launch.jsonयह अंदर है:

{
  "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",
      }
    }
  ]
}

और इसमें package.json:

  "scripts": {
    "test": "jest"
  }
  • कि परीक्षण, परिवर्तन में 1 परीक्षण चलाने के लिए, test(या it) के लिए test.only(या it.only)। 1 टेस्ट स्वीट (कई परीक्षण), परिवर्तन को चलाने के लिए describeकरने के लिएdescribe.only
  • यदि आप चाहते हैं तो ब्रेकपॉइंट सेट करें।
  • VS कोड में, डिबग व्यू (Shift + Cmd + D) पर जाएं।
  • शीर्ष पर ड्रॉपडाउन मेनू से, चुनें Jest Current File
  • उस परीक्षण को चलाने के लिए हरे तीर पर क्लिक करें।

मेरे मामले में, आपका कॉन्फ़िगरेशन केवल एक परीक्षण (इसके साथ। Only (...)) चलता है, लेकिन यह ब्रेकप्वाइंट पर नहीं रुकता है :(
ट्यूडर लेउस्टन

एक डीबगर में ब्रेकपॉइंट को हिट करने के लिए जावास्क्रिप्ट प्राप्त करना मुश्किल हो सकता है, क्योंकि इसकी अतुल्यकालिक प्रकृति के कारण। VS कोड में, जहाँ आप अपने ब्रेकपॉइंट्स रखते हैं, उसके साथ खेलते हैं, साथ ही डीबग मेनू में कमांड्स, जब तक यह उन्हें हिट नहीं करता है। यदि यह ब्रेकपॉइंट को छोड़ता है, तो उन्हें अपने कोड में EARLIER रखें। यदि 1 फ़ाइल किसी अन्य फ़ाइल में फ़ंक्शन को कॉल करती है, तो उस फ़ंक्शन कॉल पर ब्रेकपॉइंट रखें, फिर फ़ाइलों को कूदने के लिए कॉल "चरण में" करें। इन डिबग कमांड के साथ खेलें: "स्टेप ओवर, स्टेप इनटू, स्टेप आउट, कंटीन्यू"
रेमंड गण

वास्तव में, आपको इसमें आवश्यकता नहीं "scripts": { "test": "jest" }है package.jsonक्योंकि आपने "program"पैरामीटर में पूर्ण पथ निर्दिष्ट किया है launch.json
सेर्गेई

4

बस थोड़ा सा ऐड-ऑन, क्योंकि ऐसा लगता है कि एक तरह का झगड़ा था अगर इस्तेमाल करना है ./node_modules/.bin/jest -i ...या सिर्फ jest -i ...या सिर्फnpm test -- -i ...

  1. jestयदि आप इसे विश्व स्तर पर स्थापित कर चुके हैं (npm स्थापित -g jest के साथ), तो कॉलिंग कार्य केवल निर्भरता को संभालने का इतना साफ तरीका नहीं है
  2. यदि आपने पैकेज में केवल स्थानीय स्तर पर ही jest इंस्टॉल किया npx jest -i ...है और npm स्क्रिप्ट को अलग किए बिना jest स्क्रिप्ट को कॉल करना चाहते हैं, तो आप => यह वही है जो npx के लिए है। आपको लिखने से बचाता है./node_modules/.bin/...

3

यहाँ मेरा ले रहा है:

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

टिप्पणियाँ:

  • ./node_modules/.bin/...एक शानदार तरीका है, स्थानीय रूप से स्थापित जेस्ट (या मोचा या ...) बाइनरी तक पहुंचने के लिए जो स्थानीय रूप से स्थापित पैकेज के साथ आया था। (हाँ, आपकी npm लिपियों में आप कर सकते हैंjest पहले कुछ भी नहीं , लेकिन यह कमांड लाइन पर काम करता है ... (यह आपके डिबगिंग कॉन्फिग के लिए एक अच्छी शुरुआत है, जो भी आईडीई आप उपयोग कर रहे हैं ...)
  • आपकी परियोजना में विन्यास विकल्पों का एक सेट नहीं हो सकता है। लेकिन अगर यह करता है (लिपियों में झांकना package.json), तो यह है, आपको क्या चाहिए।
  • --runInBand - जैसा कि कहा गया है, अपने विन्यास के बारे में नहीं जानते हैं, लेकिन यदि आप किसी एक परीक्षण को विकसित करने / तय करने पर ध्यान केंद्रित करते हैं, तो आप वेब कंपनियों के साथ सौदा नहीं करना चाहते ...
  • हां, आप अपनी फ़ाइल में संपूर्ण, स्पष्ट पथ दे सकते हैं
  • वैकल्पिक रूप से , आप -tउस फ़ाइल में सभी परीक्षण नहीं चलाने के लिए उपयोग कर सकते हैं, लेकिन केवल एक ही (यहां: एक, जिसके show expandedनाम में कुछ ' ' है)। उसी .only()फ़ाइल में ग्लू करके समान प्रभाव प्राप्त किया जा सकता है ।

0

इसके लिए अब एक अच्छा jest plugin है जिसे jest-watch-typeaheadयह इस प्रक्रिया को बहुत सरल बनाता है।


0
npm run test -- test-name

यह केवल तभी काम करेगा जब आपका परीक्षण युक्ति नाम अद्वितीय हो। उपरोक्त कोड संदर्भ होगा

इस नाम की एक फ़ाइल: test-name.component.spec.ts

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.