ฉันจะทดสอบไฟล์เดียวโดยใช้ Jest ได้อย่างไร


359

ฉันสามารถทดสอบหลายไฟล์โดยใช้ Jest แต่ฉันไม่สามารถหาวิธีทดสอบไฟล์เดียวได้

ฉันมี:

  • วิ่ง npm install jest-cli --save-dev
  • อัปเดตpackage.json: `{... " สคริปต์ ": {" ทดสอบ ":" ตลก "} ... }
  • เขียนจำนวนการทดสอบ

การnpm testทำงานได้ตามที่คาดไว้ (ขณะนี้ทดสอบ 14 ครั้ง)

ฉันจะทดสอบไฟล์เดียวเช่นทดสอบได้app/foo/__tests__/bar.spec.jsอย่างไร

ฉันได้ลองเรียกใช้npm test app/foo/__tests__/bar.spec.js(จากรูทโปรเจ็กต์) แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

npm ERR! Error: ENOENT, open '<path to project>/node_modules/app/foo/__tests__/bar.spec.js/package.json'

ขอบคุณ

คำตอบ:


296

ในการเรียกใช้การทดสอบเฉพาะคุณจะต้องใช้jestคำสั่ง npm testจะไม่ทำงาน. ในการเข้าถึงjestโดยตรงในบรรทัดคำสั่งติดตั้งผ่านหรือnpm i -g jest-cliyarn global add jest-cli

jest bar.spec.jsแล้วก็เรียกใช้การทดสอบที่เฉพาะเจาะจงของคุณด้วย

หมายเหตุ : คุณไม่จำเป็นต้องป้อนเส้นทางแบบเต็มไปยังไฟล์ทดสอบของคุณ อาร์กิวเมนต์ถูกตีความว่าเป็น regexp ส่วนใดส่วนหนึ่งของพา ธ เต็มที่ระบุไฟล์พอเพียงโดยไม่ซ้ำกัน


5
น่าเสียดายที่นี่ไม่ทำงานสำหรับฉัน ทำงานให้jest bar.spec.js jest: command not foundฉันยืนยันว่ามีการติดตั้ง Jest ( npm list -g jestแสดงjest@0.1.37) FWIW เมื่อผมทำงานโดยใช้จะใช้npm test jest-cli
ปืนคาบศิลา

4
ใช่เป็นโมดูลขวาติดตั้งทั่วโลกjest-cli ใน npm คือ ... สิ่งอื่นnpm install -g jest-clijest
ncuillery

56
นั่นไม่ถูกต้อง การทดสอบ npm ไม่ได้หมายความว่าล้อเล่นติดตั้งทั่วโลก มันหมายถึงการล้อเล่นที่ติดตั้งภายในโครงการของคุณ
Chiedo

20
ชอบ @ChiedoJohn พูด หากต้องการเรียกใช้โดยไม่ต้องติดตั้งทั่วโลกคุณสามารถเรียกใช้จากรูทของแอพของคุณ:node_modules/.bin/jest args
Eddie Monge Jr

3
หากคุณกำลังใช้การตั้งค่าเริ่มต้นมะลิคุณสามารถมุ่งเน้นการทดสอบเดียวโดยใช้แทนfit it
eremzeit

380

สิ่งที่คุณต้องทำคือสวดมนต์เวทมนตร์:

npm test -- SomeTestFileToRun

สแตนด์อะโลน--คือเวทมนต์ * * * * สำหรับการทำเครื่องหมายจุดสิ้นสุดของตัวเลือกหมายถึง (สำหรับ NPM) ว่าทุกอย่างหลังจากนั้นจะถูกส่งผ่านไปยังคำสั่งที่กำลังทำงานอยู่ในกรณีjestนี้ นอกจากนี้คุณสามารถแสดงบันทึกการใช้งานที่ตลกขบขันได้ด้วยการพูด

npm test -- --help

ยังไงก็ตามสวดมนต์

npm test -- Foo

รันการทดสอบในไฟล์ที่มีชื่อ ( FooBar.js) อย่างไรก็ตามคุณควรทราบว่า:

  • Jest ปฏิบัติต่อชื่อเป็นแบบตรงตามตัวพิมพ์ใหญ่ - เล็กดังนั้นหากคุณใช้ระบบไฟล์ที่ไม่คำนึงถึงขนาดตัวพิมพ์ แต่เป็นการรักษาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (เช่น Windows NTFS) คุณอาจพบสิ่งที่แปลก

  • Jest ดูเหมือนจะถือว่า spec เป็นคำนำหน้า

ดังนั้นคาถาข้างต้นจะ

  • Run FooBar.js, Foo.jsและFooZilla.js
  • แต่ไม่ได้ทำงาน foo.js

ขอบคุณขออภัยฉันได้รับข้อผิดพลาดเดียวกันเมื่อใช้งานนี้:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket

1
มีวิธีอื่นในการรันการทดสอบ jest นอกเหนือจากบรรทัดคำสั่งหรือไม่? ราวกับว่าฉันส่งคำขอโพสต์ไปยังส่วนที่เหลือของโครงการ api ของฉันจะให้ปัญหาโทเค็น CSRF ฉันจะตั้งค่าการทดสอบล้อเล่นกับโครงการที่มีอยู่ของฉันได้อย่างไร เพื่อที่จะเริ่มให้บริการตามคำขอโดยใช้ '/ rest-api' แทน ' localhost: 8000 / rest-api '
Suyog Sawant

@SuyogSawant: นั่นไม่ใช่ความคิดเห็น มันเป็นคำถามของมันเอง คุณควรถามที่นี่ใน StackOverflow
Nicholas Carey

1
ในกรณีของฉันnpm test ToDoForm.test.jsทำงานง่ายในขณะที่jest ToDoForm.test.jsไม่ได้
Tomasz Mularczyk

จุดที่สองของคุณเกี่ยวกับความไวตัวพิมพ์เล็ก - ใหญ่ไม่ตรงกับคาถาที่คุณให้ไว้ข้างต้น
NSjonas

38

ในการรันการทดสอบเดี่ยว:

npm test -t ValidationUtil # `ValidationUtil` its my module `ValidationUtil.spec.js`

-t- หลังจากนั้นให้ใส่regexที่มีชื่อการทดสอบ


1
! น่ากลัว ใช้งานได้ดีมาก!
Flavio

21

การใช้npm testไม่ได้หมายความว่าล้อเล่นจะติดตั้งทั่วโลก หมายถึง "ทดสอบ" ที่ถูกแมปไปใช้ jest ใน package.json ของคุณ

ต่อไปนี้เป็นสิ่งที่ใช้ได้ผลกับฉันในระดับรากของโครงการ:

node_modules/.bin/jest [args]

args สามารถเป็นไฟล์ทดสอบที่คุณต้องการเรียกใช้หรือไดเรกทอรีที่มีหลายไฟล์


ทำงานให้ฉัน;)
wogsland

1
ขอบคุณ! มันมีประโยชน์มากสำหรับฉัน!
ไอแซค

5
ทางลัดในการเรียกใช้ไบนารีในnode_modules/.binคือใช้npxคำสั่ง ตัวอย่างเช่นnpx jest [args]
Sergio Mazzoleni

16

หากคุณใช้yarnคุณสามารถเพิ่ม.spec.jsหรือ.test.jsไฟล์ได้โดยตรงหลังจาก:

yarn test src/lib/myfile.test.js

นี่คือส่วนหนึ่งจากการpackage.jsonติดตั้ง jest ของฉันเป็นแพคเกจท้องถิ่น (ลบส่วนที่เกี่ยวข้อง):

{
...
  "scripts": {
    "test": "jest",
    "testw": "jest --watch",
    "testc": "jest --coverage",
...
  },
  "devDependencies": {
    "jest": "^18.1.0",
    ...
  },

}


6

หากคุณรันnpm >= 5.2.0และคุณได้ติดตั้ง jest แบบโลคัลdevDependenciesด้วยa npm i -d jestคุณสามารถรัน jest บนไฟล์เฉพาะได้โดยทำnpx jest /path/to/your/spec.js


5

เราใช้nrwl-NXกับเชิงมุม ในกรณีนี้เราสามารถใช้คำสั่งนี้:

npm test <ng-project> -- --testFile "file-name-part"

บันทึก:

  • npm testจะเรียกใช้สคริปต์ทดสอบที่ระบุในpackage.json: "test:client": "ng test client"
  • ดังนั้นส่วนที่เหลือของคำสั่งจะถูกส่งไปยังการทดสอบ ng
    • <ng-project> เป็นชื่อของโครงการใน angular.json
      • เมื่อคุณละเว้นพารามิเตอร์นี้จะใช้"defaultProject"(ที่ระบุในangular.json) (ดังนั้นคุณต้องระบุเมื่อการทดสอบไม่ได้อยู่ในโครงการเริ่มต้นของคุณ)
    • ต่อไปเราจะต้องตรวจสอบว่าจะใช้ตัวสร้างใด:
      • ในangular.jsonการนำทางไป"project"- "<ng-project>"- "architect"-"test"
      • และตรวจสอบ"builder"ซึ่งในกรณีของเราคือ:"@nrwl/jest:jest"
    • ตอนนี้เรารู้จักผู้สร้างเราต้องค้นหาพารามิเตอร์ cmd-line ที่มีอยู่
      • บนบรรทัดคำสั่งให้รัน npm test server -- --helpเพื่อดูตัวเลือกที่มีทั้งหมด
      • หรือตรวจสอบเอกสารออนไลน์
    • หนึ่งในตัวเลือก--testFileที่ใช้ที่นี่

นั่นคือสิ่งที่ทำเพื่อฉันเพราะเราใช้ nx ขอบคุณ.
user906573

4

นี่คือวิธีที่ฉันรันการทดสอบในไฟล์ที่ระบุโดยไม่ต้องรีสตาร์ทการทดสอบ โครงการตอบสนองของฉันถูกสร้างขึ้นคือcreate-react-app

ดังนั้นมันจึงคอยดูการทดสอบการเปลี่ยนแปลงรันการทดสอบโดยอัตโนมัติเมื่อฉันทำการเปลี่ยนแปลง

นี่คือสิ่งที่ฉันเห็นในตอนท้ายของผลการทดสอบบนเทอร์มินัล

Test Suites: 16 passed, 16 total
Tests:       98 passed, 98 total
Snapshots:   0 total
Time:        5.048s
Ran all test suites.

Watch Usage: Press w to show more.

กด W

Watch Usage
  Press f to run only failed tests.
  Press o to only run tests related to changed files.
  Press q to quit watch mode.
  Press p to filter by a filename regex pattern.
  Press t to filter by a test name regex pattern.
  Press Enter to trigger a test run.

จากนั้นกด P

Pattern Mode Usage
  Press Esc to exit pattern mode.
  Press Enter to filter by a filenames regex pattern.

 pattern 

 Start typing to filter by a filename regex pattern.

นี่คือหลังจากที่ฉันต้องการเรียกใช้ไฟล์ 'index.es6.js' ในโฟลเดอร์ 'เข้าสู่ระบบ'

Pattern Mode Usage
  Press Esc to exit pattern mode.
  Press Enter to filter by a filenames regex pattern.

 pattern  login/index

 Pattern matches 1 file
  src/containers/Login/index.es6.test.js

นั่นเป็นวิธีที่ฉันเรียกใช้การทดสอบในไฟล์เฉพาะ


4

ยังสามารถทำได้โดย

$ jest --findRelatedTests path/to/fileA.js

ref ( https://jestjs.io/docs/en/cli#running-from-the-command-line )

วิธีที่สามารถทำได้ใน Nx monorepo นี่คือคำตอบ

user@host:/path/to/workspace$ npx nx test api --findRelatedTests=apps/api/src/app/mytest.spec.ts

ข้อมูลอ้างอิง & เพิ่มเติม ( https://github.com/satminav/nx-qa/issues/6 )


1

ฉันเพิ่งติดตั้งล้อเล่นแบบโกลบอลแล้วก็วิ่งjest myFileToTest.spec.jsและใช้งานได้


1

คุณมีสองทางเลือก:

  • ตัวเลือก 1: บรรทัดคำสั่ง คุณสามารถเรียกใช้คำสั่งต่อไปนี้
node '/Users/complete-path-to-you-project/your-project/node_modules/.bin/jest' '/Users/complete-path-to-you-project/your-project/path-to-your-file-within-the-project/your-file.spec.ts'

วิธีนี้จะหลีกเลี่ยงให้คุณติดตั้ง Jest ทั่วโลก คุณใช้ความตลกขบขันที่ใช้โดยโครงการของคุณ

  • ตัวเลือกที่ 2: ถ้าคุณกำลังใช้รหัส VSคุณมีปลั๊กอินที่ดีในการทำเช่นนี้: เจ็วิ่ง มันช่วยให้คุณไม่เพียง แต่เรียกใช้ไฟล์ทดสอบตามไฟล์ แต่ยังมีชุดและสเปคเฉพาะโดยคลิกขวาที่การทดสอบที่คุณต้องการเรียกใช้

0

เจ็ทจะใช้สิ่งที่คุณผ่านการเป็นรูปแบบ regex ที่จะตรงกับ

หากคุณต้องการเรียกใช้ไฟล์ทดสอบเฉพาะ จากนั้นวิธีที่ดีที่สุดที่จะทำคือการกำหนดเส้นทางแบบเต็มให้แม่นยำ (คุณสามารถแม่นยำในเส้นทางสัมพัทธ์เช่น (src / XFolder / index.spec.ts))

วิธีที่ง่ายที่สุดในการระบุเส้นทางแบบเต็มที่อยู่ในไดเรกทอรีและใน linux คือ:

jest $PWD/index.spec.ts

หมายเหตุการใช้ตัวแปร$ PWD

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับ windows! (ได้รับการปรับปรุง)


0

ด้วย Angular และ Jest คุณสามารถเพิ่มสิ่งนี้ลงใน package.json ภายใต้ "สคริปต์"

"test:debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand"

จากนั้นเรียกใช้การทดสอบหน่วยสำหรับไฟล์เฉพาะคุณสามารถเขียนคำสั่งนี้ในเทอร์มินัลของคุณ

npm run test:debug modules/myModule/someTest.spec.ts

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.