Ketika kompleksitas dan ukuran suatu aplikasi meningkat, tidak praktis untuk mengandalkan pengujian manual keandalan, penangkapan bug dan pengujian regresi fitur baru.
Untuk mengatasi masalah ini, kami menetapkan pelari skenario sudut untuk meniru operasi pengguna dan membantu kami memverifikasi ketahanan aplikasi sudut.
1. Ringkasan
Kita dapat menulis tes skenario dalam JavaScript untuk menggambarkan perilaku aplikasi kita dan untuk berinteraksi dengan keadaan tertentu. Skenario terdiri dari satu atau lebih blok "TI" (kita dapat memperlakukan ini sebagai persyaratan untuk aplikasi kita), yang terdiri dari gilirannya perintah dan harapan. Perintah tersebut memberi tahu pelari untuk melakukan sesuatu dalam aplikasi (seperti pergi ke halaman atau mengklik tombol), dan harapan memberi tahu pelari untuk menilai sesuatu tentang keadaan (seperti nilai domain tertentu atau URL saat ini). Jika ada harapan yang gagal, Runner menandai ini "itu" sebagai "false" dan kemudian berlanjut dengan "itu" berikutnya. Skenario juga dapat memiliki blok "sebelumnya" dan "Aftereach" yang berjalan sebelum atau setelah masing -masing blok "itu", terlepas dari apakah itu lewat atau tidak.
Selain elemen -elemen di atas, skenario juga dapat mencakup fungsi pembantu untuk menghindari kode duplikat di blok "IT".
Berikut adalah contoh skenario sederhana:
Jelaskan ('Buzz Client', function () {it ('harus memfilter hasil', fungsi () {input ('user'). enter ('jacksparrow'); elemen (': tombol'). klik (); harapkan (repeater ('ul li'). count ()). toequal (10); input ('filtertext'). enter ('bees'). li '). count ()). Toequal (1);});});Skenario ini menjelaskan persyaratan klien jaringan, dan secara eksplisit, harus memiliki kemampuan untuk memfilter pengguna. Dimulai dengan memasukkan nilai ke dalam kotak input "Pengguna", mengklik satu -satunya tombol pada halaman, dan kemudian memverifikasi bahwa ada daftar 10 item. Kemudian, ia memasukkan "lebah" ke dalam kotak input "filtertext" dan kemudian memverifikasi bahwa daftar akan dikurangi menjadi hanya satu item.
Bab API berikut mencantumkan perintah dan harapan yang tersedia di Runner.
2. API
Kode Sumber: https://github.com/angular/angular.js/blob/master/src/ngscenario/dsl.js
berhenti sebentar()
Jeda eksekusi tes sampai kami memanggil resume () di konsol (Anda juga dapat mengklik tautan resume di antarmuka runner)
tidur (detik)
Jeda Eksekusi Tes selama n detik.
Browser (). Navigateto (URL)
Muat URL yang ditentukan di setFrame.
Browser (). Navigateto (URL, FN)
Muat URL yang dikembalikan oleh FN dalam kerangka uji. Parameter URL di sini hanya digunakan sebagai output tes. API ini dapat digunakan ketika URL tujuan dinamis (alamatnya masih belum diketahui saat menulis tes).
Browser (). Reload ()
Segarkan halaman yang saat ini dimuat di bingkai tes.
browser (). window (). href ()
Kembali ke window.location.href dari halaman saat ini dari bingkai uji.
browser (). window (). path ()
Mengembalikan window.location.pathname dari halaman saat ini dari bingkai uji.
Browser (). Window (). Search ()
Kembali ke window.location.Sarch dari halaman saat ini dari bingkai uji.
browser (). window (). hash ()
Mengembalikan window.location.hash (tidak termasuk #) dari halaman saat ini dari bingkai uji.
Browser (). Lokasi (). URL ()
Kembalikan hasil $ location.url () dari halaman saat ini (http://docs.angularjs.org/api/ng.$location)
Browser (). Lokasi (). Path ()
Kembalikan hasil $ location.path () dari halaman saat ini (http://docs.angularjs.org/api/ng.$location)
Browser (). Lokasi (). Search ()
Kembalikan hasil $ lokasi halaman saat ini. Pencarian () (http://docs.angularjs.org/api/ng.$location)
Browser (). Lokasi (). Hash ()
Kembalikan hasil lokasi $. hash () dari halaman saat ini (http://docs.angularjs.org/api/ng.$location)
harapkan (masa depan). {pencocokan}
Menentukan apakah nilai yang diberikan di masa depan memenuhi pencocokan. Semua deklarasi API mengembalikan objek di masa depan dengan nilai tertentu yang diperoleh setelah mereka dieksekusi. Pencocokan didefinisikan menggunakan angular.scenario.matcher, dan mereka menggunakan nilai futures untuk mengeksekusi harapan. Misalnya:
harapkan (browser () .location () .href ()) .toequal ('http://www.google.com');
harapkan (masa depan) .not (). {pencocokan}
Menentukan apakah nilai masa depan yang diberikan adalah kebalikan dari harapan yang diharapkan dari pencocokan yang ditentukan.
menggunakan (pemilih, label)
SCOPES Pilihan elemen DSL berikutnya. (Agaknya membatasi ruang lingkup pemilih, estimasi label digunakan untuk pengujian output)
contoh:
menggunakan ('#foo', "'foo' text field"). input ('bar')
mengikat (nama)
Mengembalikan ikatan pertama yang cocok dengan nama yang ditentukan (mungkin terkait dengan NG-Bind).
input (name) .enter (nilai)
Masukkan nilai yang ditentukan ke bidang nama formulir yang ditentukan.
input (name) .check ()
Pilih atau hapus centang kotak centang dari nama yang ditentukan.
input (name). select (nilai)
Pilih input [type = "Radio"] dengan nilai median radio yang ditentukan.
input (name) .val ()
Mengembalikan nilai saat ini dari input dari nama yang ditentukan.
repeater (pemilih, label) .count ()
Mengembalikan jumlah baris repeater yang cocok dengan pemilih yang ditentukan (pemilih jQuery). Label hanya digunakan sebagai output tes.
Repeater ('#Tabel Produk', 'Daftar Produk'). Count () // Jumlah baris
Repeater (pemilih, label) .row (indeks)
Mengembalikan array, mengikat baris yang ditentukan dalam repeater yang cocok dengan indeks yang ditentukan. Label hanya digunakan untuk menguji output.
Repeater ('#Tabel Produk', 'Daftar Produk'). Baris (1) // Semua binding di baris sebagai array
repeater (pemilih, label) .column (mengikat)
Mengembalikan array dengan nilai kolom di repeater yang cocok dengan ikatan yang ditentukan yang cocok dengan pemilih yang ditentukan (pemilih jQuery). Label hanya digunakan untuk menguji output.
Repeater ('#Tabel Produk', 'Daftar Produk'). Kolom ('Product.Name') // Semua nilai di semua baris dalam array
SELECT (NAME) .OPTION (Nilai)
Pilih opsi untuk menentukan nilai di pilih nama yang ditentukan.
SELECT (NAME) .Option (value1, value2)
Pilih opsi (pilihan ganda) dari nilai yang ditentukan di pilih nama yang ditentukan.
elemen (pemilih, label) .count ()
Mengembalikan jumlah elemen yang cocok dengan pemilih yang ditentukan. Label hanya digunakan sebagai output tes.
elemen (pemilih, label) .click ()
Klik elemen yang cocok dengan pemilih yang ditentukan. Label hanya digunakan sebagai output tes.
elemen (pemilih, label) .query (fn)
Jalankan FN yang ditentukan (SelectedElements, Done), dan SelectedElement adalah himpunan elemen yang cocok dengan pemilih yang ditentukan; dan selesai adalah fungsi yang akan dieksekusi setelah FN dieksekusi. Label hanya digunakan sebagai output tes.
elemen (selector, label). {Method} ()
Mengembalikan nilai pengembalian mengeksekusi metode pada elemen yang cocok dengan pemilih yang ditentukan. Metode ini dapat berupa metode jQuery berikut: val, teks, html, tinggi, bagian dalam, bagian luar, lebar, bagian dalam, luar, posisi, scrolllelft, scrolltop, offset. Label hanya digunakan sebagai output tes.
elemen (selector, label). {Method} (nilai)
Jalankan metode yang ditentukan pada elemen yang cocok dengan pemilih yang ditentukan, dan gunakan kunci dan nilai sebagai parameter. Metode ini dapat berupa metode jQuery berikut: val, teks, html, tinggi, bagian dalam, bagian luar, lebar, bagian dalam, luar, posisi, scrolllelft, scrolltop, offset. Label hanya digunakan sebagai output tes.
elemen (selector, label). {Method} (key)
Mengembalikan hasil pelaksanaan metode yang ditentukan pada elemen yang cocok dengan pemilih yang ditentukan. Metode -metode ini dapat menjadi metode jQuery berikut: attr, prop, css. Label hanya digunakan sebagai output tes.
elemen (pemilih, label). {Metode} (tombol, nilai)
Jalankan metode pada elemen yang cocok dengan pemilih yang ditentukan dan ambil kunci dan nilai sebagai parameter. Metode -metode ini dapat menjadi metode jQuery berikut: attr, prop, css. Label hanya digunakan sebagai output tes.
JavaScript adalah bahasa yang diketik secara dinamis yang membawa ekspresi yang kuat, tetapi juga memberi kita sedikit bantuan dari kompiler. Oleh karena itu, kami sangat merasa bahwa kode apa pun yang ditulis dalam JavaScript membutuhkan banyak pengujian dan komprehensif. Angular memiliki banyak fitur yang memudahkan kami untuk menguji aplikasi kami. Jadi kami tidak punya alasan untuk tidak menulis tes. (-_- !!)
Di atas adalah kumpulan informasi tentang pengujian AngularJS E2E. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs ini!