Bisakah busur derajat dan karma digunakan bersama?

104

Jika Protractor mengganti Angular Scenario Runner untuk pengujian E2E, apakah itu berarti saya masih dapat menggunakannya dengan Karma sebagai framework pengujian E2E saya?

prinsip holografik
sumber
IMO Anda harus bisa. Karma hanyalah pelari ujian. Setelah Anda menulis / membangun kasus pengujian Anda di Busur derajat .... karma harus dapat menjalankannya begitu saja ketika diminta. Dengan cara yang sama Anda dapat meminta Karma untuk menjalankan tes E2E saat ini.
skeep
1
@skeep Webdriver memunculkan dan menghubungkan ke browser melalui protokol WebDriver - sesuatu yang tidak didukung Karma (menggunakan WebSockets dan halaman web sebagai gantinya). Mereka melakukan tugas serupa dengan cara yang sangat berbeda. Pengujian Karma E2E yang sekarang tidak digunakan lagi tidak menggunakan WebDriver dan menderita karenanya - pengujian tersebut harus mempertahankan status dalam browser (status WebDriver sepenuhnya di luar proses browser).
Andy

Jawaban:

102

Tidak direkomendasikan oleh pengelola busur derajat saat ini:

https://github.com/angular/protractor/issues/9#issuecomment-19927049

Busur derajat dan Karma tidak boleh digunakan bersama; sebagai gantinya mereka menyediakan sistem terpisah untuk menjalankan pengujian. Busur derajat dan Karma mencakup berbagai aspek pengujian - Karma sebagian besar dimaksudkan untuk pengujian unit, sedangkan Busur derajat harus digunakan untuk pengujian ujung ke ujung.

Protractor dibangun di atas WebDriverJS, yang menggunakan server Selenium / WebDriver untuk menyediakan browser dan mendorong eksekusi uji. Contoh WebDriverJS murni dapat ditemukan di sini: http://code.google.com/p/selenium/wiki/WebDriverJs

Dan

https://github.com/angular/protractor/issues/9#issuecomment-19931154

Georgios - Saya pikir masuk akal untuk memisahkan Protractor dan Karma - untuk pengujian ujung ke ujung, Anda menginginkan event driving asli dan fleksibilitas webdriver, sedangkan untuk pengujian unit Anda menginginkan eksekusi cepat dan autowatching file.

mendongkrak
sumber
Apakah ini masih benar bahwa kita tidak boleh menjalankan Busur Derajat dari Karma?
ErikAGriffin
@theLateWizard Benar-benar benar, tidak hanya Anda tidak boleh, Anda tidak bisa :)
Dmitri Zaitsev
74

MEMPERBARUI. Berikut adalah paket sederhana yang saya buat untuk menambahkan penyiapan Karma minimal ke proyek apa pun dengan satu perintah npm install min-karma.


Saya ingin mengklarifikasi beberapa kemungkinan kesalahpahaman tentang Karma dan Busur derajat . FAQ Karma sebenarnya mengacu pada Adaptor untuk Angular's Scenario Runner , yang, bagaimanapun, tampaknya ditinggalkan, dengan Busur derajat yang direkomendasikan sebagai gantinya.


Karma

Karma adalah runner pengujian yang akan menjalankan file JavaScript yang ditentukan dalam file konfigurasi Anda secara eksplisit atau menggunakan node-globs . (Untuk template eksternal non-JavaScript , Angular's Unit Testing Guide merekomendasikan penggunaan preprocessor Karma html untuk mengkompilasinya ke dalam JavaScript terlebih dahulu.)

Ini bisa berupa semua file sumber Anda, beberapa di antaranya, beberapa di antaranya ditambah beberapa file tambahan atau file yang tidak relevan dengan proyek Anda, hanya menyediakan beberapa konfigurasi tambahan - sebut saja! Anda dapat memiliki beberapa file konfigurasi karma untuk tujuan yang berbeda, yang dapat Anda jalankan secara paralel atau satu per satu. Setiap proses karma meluncurkan perambannya sendiri (ini saat ini tersedia) .

Ini fitur dari Karma untuk menjalankan hanya set file adalah apa yang membuatnya sempurna untuk tes cepat berjalan di latar belakang pada setiap file mengedit sumber, dan mendapatkan umpan balik segera, yang brilian! Satu-satunya negatif adalah pelaporan kesalahan "berisik" yang mudah-mudahan akan meningkat!


Karma tidak hanya untuk tes unit

Uji unit adalah untuk satu unit kode sumber Anda. Dalam kasus Angular, unit tipikal adalah Komponen Angular ( Service, Factory, Provider, Controller, Filter, Directivedll). Ingatlah untuk menjaga Anda Controllerstipis, sehingga terlalu banyak unit test untuk latters adalah bendera merah .

Dalam pengujian unit , setiap unit kode lainnya, di mana unit ini bergantung (disebut dependensi unit) tidak boleh diuji pada saat yang sama. Sebaliknya mereka harus "diejek", misalnya diganti dengan sesuatu yang sederhana seperti contoh dummy. Angular memberikan dukungan lingkungan tiruan yang bagus . Idealnya Anda ingin melihat semua tiruan itu langsung di dalam pengujian Anda, jadi Anda tidak perlu bertanya-tanya dari mana semua dependensi itu berasal.

Karma juga berguna untuk Tes Integrasi , di mana sekelompok unit kode sumber diuji bersama, dengan hanya beberapa dependensinya yang diejek. Penting untuk diingat bahwa setiap dependensi secara default disediakan dari modul kode sumber Anda (selama modul tersebut dimasukkan secara langsung ke dalam pengujian Anda , atau merupakan dependensi dari modul lain yang dimasukkan (dalam hal ini Anda tidak perlu memasukkannya) , tetapi tidak ada salahnya untuk melakukannya). Dependensi yang dibuat-buat akan menimpa yang disediakan.

Berlari Cepat dan Sering adalah fitur utama Karma . Ini berarti Anda ingin menghindari permintaan server apa pun, kueri database apa pun, apa pun yang dapat memakan waktu lebih lama dari sepersekian detik. ( Kalau tidak, TIDAK akan cepat! ) Proses panjang itu adalah yang ingin Anda tiru . Ini juga menjelaskan mengapa praktik yang buruk untuk meletakkan layanan mentah tingkat rendah seperti $httplangsung di dalam pengontrol Anda atau unit logika bisnis yang rumit. Dengan menggabungkan layanan komunikasi luar tingkat rendah ke dalam layanan khusus yang lebih kecil, Anda membuatnya lebih mudah untuk "mengejek mereka".

Apa yang tidak dilakukan Karma adalah menjalankan situs Anda apa adanya, yang merupakan pengujian End-to-End (E2E). Pada prinsipnya, Anda dapat menggunakan metode internal Angular untuk membuat ulang situs atau bagiannya. Yang mana, untuk potongan kecil, bisa berguna, dan cara cepat misalnya untuk menguji arahan.

Namun, ini bukan cara yang disarankan untuk memasukkan kode yang rumit ke dalam pengujian Anda. Semakin sering Anda melakukannya, semakin besar kemungkinan Anda membuat kesalahan dalam kode itu daripada apa yang sebenarnya Anda uji.

Itulah mengapa saya pribadi tidak menyukai metode pengujian rumit yang sering disebutkan menggunakan metode tingkat rendah seperti $http. Ini bekerja lebih bersih untuk mengisolasi referensi apa pun ke metode tingkat rendah ke dalam metode khusus Anda sendiri, yang tanggung jawab tunggal adalah membuat permintaan http. Metode khusus ini harus dapat bekerja dengan backend asli , bukan yang palsu! Yang dapat Anda uji dengan mudah - secara manual atau bahkan baik-baik saja dengan Karma yang berjalan dengan konfigurasi khusus lainnya , selama Anda tidak mencampur konfigurasi itu dengan yang biasanya digunakan untuk menjalankan Karmateratur dan cepat. Sekarang, setelah layanan kecil khusus Anda diuji, Anda dapat dengan aman dan mudah mengejeknya untuk menguji logika Anda yang lain dan memasukkan tes ini ke dalam pengaturan Karma reguler Anda .


Untuk meringkas. Gunakan Karma untuk menjalankan kumpulan file JavaScript apa pun. Ini (harus) cepat. Anda tidak melihat aplikasi lengkap Anda, jadi tidak dapat menguji hasil akhir secara efektif dan andal. Apakah saya akan menjalankannya dengan Busur derajat ? Mengapa saya harus? Menjalankan Busur Derajat akan memperlambat tes saya, mengalahkan tujuan Karma . Mudah untuk menjalankan busur derajat secara terpisah.


Busur derajat

Busur derajat adalah:

kerangka kerja pengujian ujung-ke-ujung untuk aplikasi AngularJS. Busur derajat menjalankan pengujian terhadap aplikasi Anda yang berjalan di browser nyata, berinteraksi dengannya seperti yang dilakukan pengguna.

Jadi Busur derajat melakukan persis apa yang tidak dilakukan Karma - jalankan aplikasi akhir Anda yang sebenarnya. Ini mengungkapkan kekuatan dan keterbatasannya:

Menjalankan aplikasi lengkap adalah satu-satunya tes akhir yang andal agar aplikasi Anda berfungsi seperti yang diharapkan. Anda dapat menulis skenario cerita pengguna lengkap dan mengujinya!

Namun , lebih sulit untuk melacak kesalahan tanpa mengisolasi unit individu dari kode sumber Anda. Inilah mengapa Anda masih membutuhkan Karma untuk menguji kode JavaScript Anda terlebih dahulu.


Sekarang apakah saya ingin menjalankan Busur Derajat dengan Karma ? Saya pasti dapat menjalankannya di jendela terminal terpisah, secara paralel. Pada prinsipnya, saya dapat meminta mereka membagikan file pengujian jika perlu, tetapi biasanya saya lebih suka tidak. Mengapa? Karena saya ingin membuat tes saya kecil dengan satu tujuan khusus.

Satu-satunya pengecualian adalah file yang menentukan makro pengujian yang berguna untuk kedua pelari. Namun, ini bukan file pengujian, tetapi file definisi makro .

Selain itu, saya menyukai pemisahan yang jelas antara ujian saya. Itu harus dijalankan secara sering dan cepat, dan untuk aplikasi lengkap. Itu membuat pemisahan yang jelas antara saat menggunakan Karma dan saat Busur derajat .

Dmitri Zaitsev
sumber
Jika saya ingin pengujian unit serta pengujian e2e maka saya harus mengkonfigurasi lingkungan karma untuk pengujian unit dan busur derajat untuk pengujian ui atau pengujian e2e?
Sunil Garg
@SunilGarg Ya kalo mau pake keduanya, tapi seperti yang saya tulis, Karma tidak hanya untuk unit testing.
Dmitri Zaitsev
1

Karma adalah pelari tes yang disediakan oleh tim Angular, Karma akan menjalankan tes Anda di beberapa browser yang akan memastikan bahwa aplikasi kami kompatibel di semua browser. Unit Test untuk angular js dapat digunakan karma + melati

Jasmine adalah kerangka kerja pengujian unit javascript dan akan memberi kami utilitas untuk menguji aplikasi kami. Ini bekerja paling baik pada kerangka Angular dan dengan demikian, pilihan kami "alat pengujian unit otomatis". https://github.com/shahing/testingangularjs

Dan Busur derajat adalah kerangka pengujian ujung ke ujung untuk aplikasi Angular dan AngularJS. Busur derajat menjalankan tes terhadap aplikasi Anda yang berjalan di browser nyata, browser tanpa head, pengujian lintas browser dan dapat dihosting di saucelabs.

https://github.com/shahing/Protractor-Web-Automation

Shahin
sumber
1

Ya, Anda bisa menggunakan karma dan busur derajat bersama-sama. Karma digunakan untuk pengujian unit komponen yang Anda buat menggunakan perintah angular. Anda dapat menguji komponen tersebut menggunakan karma. Busur derajat digunakan untuk pengujian ujung ke ujung. Ini terutama digunakan untuk pengujian UI.

Rahul Solanki
sumber
Untuk mencapai ini, Anda perlu menambahkan konfigurasi untuk karma dan busur derajat
Rahul Solanki