Karma: Menjalankan satu file uji dari baris perintah

95

Jadi, saya telah mencari semua ini, menemukan jawaban yang "mirip" di sini, tetapi tidak persis seperti yang saya inginkan.

Saat ini jika saya ingin menguji satu file dengan karma, yang perlu saya lakukan fit(), fdescribe()pada file yang dimaksud ...

Namun, yang saya inginkan adalah dapat memanggil karma, dengan file konfigurasi, dan mengarahkannya ke file tertentu, jadi saya tidak perlu memodifikasi file sama sekali, yaitu:

karma run --conf karma.conf.js --file /path/to/specific/test_file.js

apakah mungkin melakukan ini? Atau dengan pembantu? (menggunakan grunt atau gulp?)

Gonçalo Vieira
sumber
1
Sudah mencoba karma run -- --grep=testDescriptionFilter? Saya telah melihat ini disarankan sebelumnya, tetapi saya tidak dapat memverifikasi secara langsung bahwa itu berfungsi. (Jika saya di rumah, saya akan mencoba sebelum menyarankan. Karena saya tidak dapat mencoba- Saya berkomentar daripada menjawab.) :)
bvaughn
1
bukankah itu hanya untuk yang spesifik it? Tidak ada kemungkinan menggunakannya untuk file?
Gonçalo Vieira
3
Sejujurnya, saya selalu memodifikasi karma.conf jika saya ingin fokus pada satu file pengujian. Cukup mudah untuk melakukannya sehingga saya tidak pernah berusaha untuk menemukan cara yang lebih cepat.
bvaughn
1
Hot Dog. Senang bisa membantu. Diposting. :)
bvaughn

Jawaban:

60

Pertama, Anda perlu memulai server karma dengan

karma start

Kemudian, Anda dapat menggunakan grep untuk memfilter pengujian tertentu atau mendeskripsikan blok:

karma run -- --grep=testDescriptionFilter
bvaughn.dll
sumber
12
Jawaban ini harus mengatakan bahwa Anda harus karmamenjalankan dengan karma startsebelum menjalankankarma run
etagwerker
4
Saya tidak terlalu berpikir itu perlu, mengingat pertanyaan menanyakan tentang cara memfilter karma run. Tampak cukup jelas bahwa poster tersebut mengetahui cara memulai Karma dan menjalankan semua pengujian dan hanya mencari sintaks tentang pemfilteran.
bvaughn
2
Apa yang dapat saya lakukan jika saya ingin ini terjadi secara terprogram? Yaitu saya tidak akan tahu deskripsi file yang berubah, tetapi saya akan tahu nama filenya.
MPV
3
Solusi ini tampaknya tidak bekerja sama sekali dengan tes Jasmine (karma-jasmine). Dan karma run --help tidak menampilkan --grep sebagai opsi perintah sama sekali. Saya menggunakan Karma terbaru (tertulis 1.5.0).
Yavin5
11
ini tidak menjalankan tes tunggal!
eav
17

Meskipun --filestidak lagi didukung, Anda dapat menggunakan variabel env untuk memberikan daftar file:

// karma.conf.js
function getSpecs(specList) {
  if (specList) {
    return specList.split(',')
  } else {
    return ['**/*_spec.js'] // whatever your default glob is
  }
}

module.exports = function(config) {
  config.set({
    //...
    files: ['app.js'].concat(getSpecs(process.env.KARMA_SPECS))
  });
});

Kemudian di CLI:

$ env KARMA_SPECS="spec1.js,spec2.js" karma start karma.conf.js --single-run
Yuriy Kharchenko
sumber
1
Ini akhirnya bekerja dengan baik! Pastikan glob default Anda memiliki nama direktori di depannya, atau Anda akan mendapatkan kesalahan pola. Juga, saya mengubah file saya: definisi seperti ini: files: [] .concat (getSpecs (process.env.KARMA_SPECS)), Dan itu akhirnya bekerja lebih baik, karena fungsinya sudah menempatkan pola glob di sana jika tidak ada variabel lingkungan set. Oh, dan saya tidak berpikir Anda membutuhkan "env" di depan perintah (itu bekerja untuk saya tanpa itu). Terima kasih untuk solusi ini @Yuriy Kharchenko!
Yavin5
6

Opsi ini tidak lagi didukung di versi terbaru karma:

lihat https://github.com/karma-runner/karma/issues/1731#issuecomment-174227054

Larik file dapat didefinisikan ulang menggunakan CLI sebagai berikut:

karma start --files=Array("test/Spec/services/myServiceSpec.js")

atau lolos:

karma start --files=Array\(\"test/Spec/services/myServiceSpec.js\"\)

Referensi

Paul Sweatte
sumber
2
beri saya kesalahan ini - bash: kesalahan sintaks dekat token tak terduga `('
Lakshay
5
Jadi, ketika saya mencoba ini saya mendapatkan kesalahan berikut config.files = config.files.map(createPatternObject).map(createPatternMapper(basePathResolve)):, yang mungkin disebabkan oleh fakta bahwa saya menggunakan requireJS?
Gonçalo Vieira
1
erm, bukan karena requireJS, untuk beberapa alasan aneh karma tidak membaca Array ("zzz") sebagai JS Array? O_o
Gonçalo Vieira
2
nm, tampaknya karma tidak lagi mendukung --files arg?
Gonçalo Vieira
23
Peringatan untuk semua orang yang datang ke sini opsi ini tidak lagi didukung di karma: github.com/karma-runner/karma/issues/…
dignifiedquire