Bagaimana cara menguji satu file menggunakan Jest?

360

Saya dapat menguji banyak file menggunakan Jest, tetapi saya tidak tahu cara menguji satu file.

Saya sudah:

  • Lari npm install jest-cli --save-dev
  • Diperbarui package.json: `{..." skrip ": {" test ":" jest "} ...}
  • Menulis sejumlah tes.

Menjalankan npm testberfungsi seperti yang diharapkan (saat ini menjalankan 14 tes).

Bagaimana cara menguji satu file, misalnya pengujian app/foo/__tests__/bar.spec.js?

Saya telah mencoba menjalankan npm test app/foo/__tests__/bar.spec.js(dari root proyek), tetapi saya mendapatkan kesalahan berikut:

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

Terima kasih

Musket
sumber

Jawaban:

298

Untuk menjalankan tes tertentu, Anda harus menggunakan jestperintah. npm testtidak akan bekerja. Untuk mengakses jestlangsung pada baris perintah, instal melalui npm i -g jest-cliatau yarn global add jest-cli.

Maka cukup jalankan tes khusus Anda dengan jest bar.spec.js.

Catatan : Anda tidak harus memasukkan path lengkap ke file tes Anda. Argumen diartikan sebagai regexp. Bagian mana pun dari jalur lengkap yang secara unik mengidentifikasi file sudah mencukupi.

ncuillery
sumber
5
Sayangnya ini tidak bekerja untuk saya. Berlari jest bar.spec.jsmemberi jest: command not found. Saya sudah mengkonfirmasi Jest sudah diinstal ( npm list -g jestpertunjukan [email protected]). FWIW, ketika saya menjalankan menggunakannya npm testmenggunakan jest-cli.
Musket
4
Ya, jest-cliadalah modul yang tepat, instal secara global npm install -g jest-cli. jestdi npm adalah ... sesuatu yang lain
ncuillery
56
Itu tidak benar. npm test berfungsi tidak berarti bahwa lelucon diinstal secara global. Itu hanya berarti lelucon diinstal dalam proyek Anda.
Chiedo
20
Seperti kata @ChiedoJohn. Untuk menjalankannya tanpa menginstal secara global, Anda dapat menjalankan ini dari root aplikasi Anda:node_modules/.bin/jest args
Eddie Monge Jr
3
Jika Anda menggunakan pengaturan melati default, Anda dapat memfokuskan tes tunggal dengan menggunakan fitalih-alih it.
eremzeit
380

Yang harus Anda lakukan adalah mengucapkan mantra sihir:

npm test -- SomeTestFileToRun

Standalone --adalah * nix magic untuk menandai akhir dari opsi, yang berarti (untuk NPM) yang semuanya setelah itu diteruskan ke perintah yang sedang dijalankan, dalam hal ini jest. Selain itu, Anda dapat menampilkan catatan penggunaan lelucon dengan mengatakan

npm test -- --help

Bagaimanapun, nyanyian

npm test -- Foo

menjalankan tes dalam file bernama ( FooBar.js). Anda harus mencatat, bahwa:

  • Jest memperlakukan nama tersebut sebagai case-sensitive, jadi jika Anda menggunakan sistem file case-insensitive, tetapi case-preserving (seperti Windows NTFS), Anda mungkin menemukan apa yang tampak sebagai keanehan yang terjadi.

  • Jest tampaknya memperlakukan spec sebagai awalan.

Jadi mantera di atas akan

  • Jalankan FooBar.js, Foo.jsdanFooZilla.js
  • Tapi JANGAN lari foo.js
Nicholas Carey
sumber
Terima kasih, sayangnya saya mendapatkan kesalahan yang sama ketika menjalankan ini:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket
1
apakah ada metode alternatif untuk menjalankan tes lelucon selain dari baris perintah ?? , seolah-olah saya membuat permintaan posting ke proyek saya yang tersisa api itu akan memberi saya masalah CSRF. Seperti bagaimana saya mengatur pengujian lelucon untuk proyek saya yang ada ?? sehingga akan mulai melayani permintaan menggunakan '/ rest-api' alih-alih ' localhost: 8000 / rest-api '
Suyog Sawant
@SuyogSawant: itu bukan komentar. itu pertanyaan sendiri. Anda harus bertanya di sini di StackOverflow.
Nicholas Carey
1
dalam kasus saya sederhana npm test ToDoForm.test.jsbekerja sementara jest ToDoForm.test.jstidak
Tomasz Mularczyk
Poin kedua Anda tentang sensitivitas case tidak cocok dengan mantera yang Anda berikan di atas.
NSjonas
38

Untuk menjalankan tes individual:

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

-t- setelah itu masukkan regex yang berisi nama tes.

cabaji99
sumber
1
Luar biasa! Bekerja dengan baik!
Flavio
21

Menggunakan npm test bukan berarti gurauan adalah menginstal secara global. Itu hanya berarti "tes" dipetakan untuk menggunakan lelucon di package.json Anda

Berikut ini adalah apa yang berhasil bagi saya, di tingkat akar proyek:

node_modules/.bin/jest [args]

args dapat berupa file uji yang ingin Anda jalankan atau direktori yang berisi banyak file.

AeroHil
sumber
Bekerja untuk saya;)
wogsland
1
Terima kasih! ini sangat berguna bagi saya!
Isaac
5
cara pintas untuk menjalankan binari node_modules/.binadalah dengan menggunakan npxperintah. Misalnyanpx jest [args]
Sergio Mazzoleni
16

jika Anda menggunakan, yarnAnda dapat menambahkan file .spec.jsatau .test.jslangsung setelah:

yarn test src/lib/myfile.test.js

Ini adalah bagian dari my package.jsonwith jest install sebagai paket lokal (menghapus bagian yang relevan):

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

}
Andreas Heissenberger
sumber
11

Anda dapat menggunakan nama file dengan npm test --:

npm test -- fileName.jsx 
Hilal Aissani
sumber
1
itu seharusnya jawabannya!
Allan Stepps
6

Jika Anda menjalankan npm >= 5.2.0dan Anda telah menginstal gurauan secara lokal sebagai devDependenciesdengan npm i -d jestAnda dapat menjalankan gurauan pada file tertentu dengan melakukannpx jest /path/to/your/spec.js

Bhaggi
sumber
5

Kami menggunakan nrwl-nx dengan sudut . Dalam hal ini kita dapat menggunakan perintah ini:

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

catatan:

  • npm testakan menjalankan skrip uji yang ditentukan dalam package.json: "test:client": "ng test client"
  • dengan demikian sisa cmd akan diteruskan ke tes ng
    • <ng-project> adalah nama proyek di angular.json
      • ketika Anda menghilangkan parameter ini "defaultProject"(ditentukan dalam angular.json) akan digunakan (jadi Anda harus menentukannya, ketika tes tidak dalam proyek default Anda)
    • selanjutnya kita harus memeriksa builder mana yang digunakan:
      • dalam angular.jsonmenavigasi ke "project"- "<ng-project>"- "architect"-"test"
      • dan periksa "builder", yang dalam kasus kami adalah:"@nrwl/jest:jest"
    • sekarang kita tahu pembangun, kita perlu menemukan parameter cmd-line yang tersedia
      • pada baris perintah, jalankan npm test server -- --helpuntuk melihat semua opsi yang tersedia
      • atau periksa dokumen online
    • salah satu opsi --testFileyang digunakan di sini
TmTron
sumber
Itulah yang melakukannya untuk saya karena kami menggunakan nx. Terima kasih.
user906573
4

Ini adalah bagaimana saya menjalankan tes secara dinamis pada file tertentu tanpa memulai kembali tes. Proyek reaksi saya dibuat adalahcreate-react-app

jadi itu mengawasi tes untuk perubahan, secara otomatis menjalankan tes ketika saya membuat perubahan.

Jadi ini yang saya lihat di akhir hasil tes di terminal.

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.

Tekan 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.

lalu tekan 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.

ini setelah saya ingin menjalankan file 'index.es6.js' di folder 'Login'

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

Itulah cara saya menjalankan tes pada file tertentu.

deko
sumber
1

Saya baru saja menginstal lelucon sebagai global dan kemudian berlari jest myFileToTest.spec.jsdan itu berhasil

URL87
sumber
1

Anda memiliki dua opsi:

  • Opsi 1: Baris perintah. Anda dapat menjalankan perintah berikut
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'

Ini menghindari Anda untuk menginstal Jest secara global. Anda menggunakan lelucon yang digunakan oleh proyek Anda.

  • Opsi 2: Jika Anda menggunakan Kode VS Anda memiliki plugin yang bagus untuk melakukan ini: Jest Runner . Ini memungkinkan Anda tidak hanya menjalankan file tes per file tetapi bahkan Suites dan Spesifikasi spesifik hanya dengan klik kanan pada tes yang ingin Anda jalankan.
Hay OUE
sumber
0

Jest akan menggunakan apa yang Anda lewati sebagai pola regex . Itu akan cocok untuk.

Jika Anda ingin menjalankan file pengujian tertentu. Maka cara terbaik untuk melakukannya adalah dengan mengatur jalur lengkap ke sana. (Anda juga dapat mengatur jalur relatif tertentu seperti (src / XFolder / index.spec.ts)).

Cara termudah untuk menyediakan path lengkap yang ada di direktori dan di linux adalah:

jest $PWD/index.spec.ts

Perhatikan penggunaan variabel $ PWD .

masukkan deskripsi gambar di sini

Untuk windows! (akan diperbarui)

Mohamed Allal
sumber
0

Dengan Angular dan Jest Anda dapat menambahkan ini ke package.json di bawah "skrip"

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

Kemudian untuk menjalankan tes unit untuk file tertentu Anda dapat menulis perintah ini di terminal Anda

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