Rumah >hujung hadapan web >tutorial js >Permohonan Ujian Unit Backbone.js
hari , meletakkan sentuhan penamat pada ciri baru yang hebat untuk aplikasi web anda, anda akhirnya bersedia untuk melihatnya dalam tindakan. Anda menambah kod baru ke pangkalan JavaScript anda, membina calon pelepasan, dan api penyemak imbas anda, mengharapkan kagum. Kemudian ... uh oh ... ciri baru mungkin berfungsi dengan baik, tetapi beberapa bahagian kritikal lain dari aplikasi anda - bahagian yang anda tidak sentuh semasa membangunkan versi baru - telah menjadi sangat teruk. Sekarang anda berhadapan dengan cabaran mundur melalui hari kerja untuk mencuba dan mengetahui bagaimana anda memecahkan kod yang sedia ada. Hari gembira pasti tidak di sini lagi.
senario yang sangat menggigit saya lebih daripada yang saya ingin mengakui. Dan jika anda telah pengekodan seketika, anda mungkin melihatnya juga. Pertimbangkan, bagaimanapun, apa yang membuat senario ini sangat menyakitkan. Ia tidak semestinya kerana kod baru kami memecahkan kod sedia ada; Itu tidak dapat dielakkan dalam pembangunan. Kesakitan sebenar adalah bahawa ia mengambil masa yang lama untuk melihat kerosakan. Dengan begitu banyak perkembangan sejak kami tahu permohonan kami berfungsi, terdapat banyak kod di mana pepijat mungkin bersembunyi. Dan, walaupun ia kelihatan seperti memburu jarum dalam jerami, kita tidak mempunyai pilihan selain menyelamnya.Dalam artikel ini kita benar -benar akan menghilangkan senario ini dari pembangunan JavaScript kami. Tidak lagi menggali jam, hari, atau minggu kod mencari jarum. Prinsip yang kami pakai adalah mudah: Cari mana -mana bug
sebaik sahaja kami menciptanya. Betul; Kami akan menubuhkan persekitaran pembangunan dan proses yang memberitahu kami dengan segera apabila kami menulis kod yang memperkenalkan bug. Selain itu, usaha tambahan yang kami masukkan ke dalam proses tidak akan membazir sebaik sahaja pembangunan awal selesai. Kod ujian yang sama yang menangkap pepijat pembangunan kami akan diguna semula sepenuhnya dalam persekitaran integrasi. Kami dengan mudah boleh memasukkan ujian ke dalam sistem pengurusan kod sumber kami, menyekat pepijat sebelum mereka dapat masuk ke dalam pangkalan kod kami.
Dalam empat bahagian yang berikut, kita akan melihat alat -alat yang kita perlukan untuk persekitaran ujian JavaScript. Kami kemudian akan mempertimbangkan aplikasi remeh, yang cukup mudah untuk difahami, namun mempunyai semua ciri dan fungsi yang mungkin wujud dalam aplikasi web pengeluaran sebenar. Dua bahagian terakhir menunjukkan bagaimana kita boleh menggunakan persekitaran kita untuk menguji aplikasi contoh semasa pembangunan dan, apabila pembangunan awal selesai, semasa integrasi.Untuk pengekodan JavaScript, tidak ada persekitaran pembangunan yang lebih baik daripada pelayar web moden. Sama ada citarasa anda adalah alat pemaju Firebug atau WebKit, penyemak imbas menyokong pemeriksaan dan penyuntingan dom langsung, debugging interaktif penuh, dan analisis prestasi yang canggih. Penyemak imbas web sangat bagus untuk pembangunan, dan alat ujian dan persekitaran kami mesti diintegrasikan dengan pembangunan dalam penyemak imbas. Pelayar web, bagaimanapun, tidak begitu hebat untuk ujian integrasi. Ujian integrasi sering mengambil tempat di pelayan di suatu tempat di awan (atau paling tidak di suatu tempat di pusat data). Sistem tersebut tidak mempunyai antara muka pengguna grafik, apalagi penyemak imbas web moden. Untuk ujian integrasi yang cekap, kami memerlukan skrip baris arahan mudah dan persekitaran pelaksanaan JavaScript yang menyokong mereka. Bagi keperluan tersebut, alat pilihan adalah node.js. Walaupun terdapat persekitaran perintah javascript lain, tidak ada yang mempunyai keluasan dan kedalaman sokongan untuk memadankan Node.js. Dalam fasa integrasi, alat ujian kami mesti diintegrasikan dengan node.js.
Sekarang bahawa kami telah menetapkan bahawa alat ujian kami mesti menyokong kedua -dua penyemak imbas web dan persekitaran Node.js, kami dapat mempersempit pilihan yang cukup untuk memilih rangka kerja ujian teras. Ramai kerangka ujian JavaScript wujud, tetapi kebanyakannya sangat berat sebelah terhadap ujian penyemak imbas; Mendapatkan mereka bekerja dengan node.js biasanya mungkin, tetapi sering memerlukan hacks atau tweak yang tidak masuk akal. Satu rangka kerja yang tidak menderita masalah ini adalah mocha, yang sememangnya menggambarkan dirinya sebagai:
Mocha adalah kerangka ujian JavaScript yang kaya dengan ciri yang berjalan pada nod dan penyemak imbas, membuat ujian tak segerak mudah dan menyeronokkan.
Asalnya dibangunkan untuk node.js, mocha telah diperluaskan untuk menyokong penyemak imbas web dengan mudah. Dengan menggunakan Mocha sebagai rangka kerja ujian kami, kami boleh menulis ujian yang menyokong kedua -dua pembangunan dan integrasi tanpa pengubahsuaian.
Tidak seperti beberapa kerangka ujian JavaScript, Mocha direka untuk fleksibiliti maksimum. Akibatnya, kita perlu memilih beberapa bahagian tambahan untuk menjadikannya lengkap. Khususnya, kita memerlukan perpustakaan penegasan JavaScript. Untuk itu, kami akan bergantung kepada Perpustakaan Penegasan Chai. Chai agak unik kerana ia menyokong semua gaya penegasan biasa - menegaskan , mengharapkan, dan harus. kod. Di bawah penutup, mereka semua bersamaan; Sangat mudah untuk menterjemahkan ujian dari satu gaya penegasan ke yang lain. Perbezaan utama dalam gaya pernyataan adalah kebolehbacaan mereka. Pilihan gaya penegasan bergantung pada gaya yang anda (atau pasukan anda) mencari yang paling mudah dibaca, dan gaya mana yang menghasilkan ujian yang paling difahami. Untuk melihat perbezaannya, pertimbangkan untuk membangunkan ujian remeh untuk kod berikut:
<span>var sum = 2 + 2;</span>Ujian gaya tradisional dan menegaskan boleh ditulis sebagai:
assert<span>.equal(sum, 4, "sum should equal 4");</span>ujian itu mendapat pekerjaan yang dilakukan, tetapi melainkan jika anda telah terbiasa dengan ujian unit sekolah lama, mungkin sedikit mencabar untuk membaca dan mentafsir. Gaya penegasan alternatif menggunakan jangkaan:
<span>expect(sum).to.equal(4);</span>Kebanyakan pemaju mencari pernyataan gaya yang lebih mudah untuk dibaca dan difahami daripada ujian gaya menegaskan. Alternatif ketiga, harus membuat pernyataan ujian lebih seperti bahasa semulajadi:
sum<span>.should.equal(4);</span>Perpustakaan Chai menyokong ketiga -tiga gaya pernyataan. Dalam artikel ini kita akan berpegang teguh.
Spies, Stubs, and Mocks
Alat akhir untuk meja kerja ujian kami adalah persekitaran pembangunan untuk ujian unit. Untuk contoh kami, kami akan menggunakan Test'em. Test'em adalah koleksi skrip berguna untuk menubuhkan dan menjalankan persekitaran ujian yang berterusan. Kita boleh, jika kita memilih, menulis skrip sendiri dan menguruskan alam sekitar secara manual; Walau bagaimanapun, Toby Ho (Pencipta Test'em) telah mengumpulkan pakej hebat yang dapat menyelamatkan kita masalah.
Untuk melihat persekitaran ujian kami dalam tindakan, mari kita pertimbangkan aplikasi mudah. Walaupun pared ke keperluan pentingnya, aplikasi ini merangkumi semua fungsi yang diperlukan untuk aplikasi sebenar. (Kod sumber lengkap untuk aplikasi boleh didapati di GitHub.)
Pengguna dapat melihat senarai todos mereka, dan mereka boleh mengklik pada kotak semak untuk bertukar -tukar status Todo.
Aplikasi kami bermula dengan jadual pangkalan data yang memegang maklumat untuk TODOS. Inilah SQL yang boleh kita gunakan untuk membuat jadual itu.
<span>var sum = 2 + 2;</span>
Dan inilah caranya jadual mungkin kami telah meletakkan beberapa data ujian di dalamnya.
seperti yang ditunjukkan oleh jadual, todos kami hanya termasuk kunci utama (ID), tajuk, dan sedikit status untuk menunjukkan sama ada atau tidak mereka selesai.
perpustakaan JavaScript
Sekarang kita tahu komponen yang akan terdiri daripada aplikasi kita, kita boleh menentukan rangka HTML yang akan menyokongnya. Tidak ada apa -apa yang mewah mengenainya (namun), hanya dokumen HTML5 yang minimum, beberapa fail JavaScript, dan sedikit kod untuk memulakan sesuatu.
<span>var sum = 2 + 2;</span>
Sekarang kami telah memilih alat kami dan menetapkan aplikasi, sudah tiba masanya untuk memulakan pembangunan. Tugas pertama kami sedang memasang alat.
Walaupun kami akan membangun dalam penyemak imbas, persekitaran ujian kami bergantung pada Node.js. Oleh itu, langkah pertama adalah memasang Node.js dan Pengurus Pakej Node (NPM). Terdapat binari yang boleh dilaksanakan untuk OS X, Windows, Linux, dan Sunos di laman web Node.js, serta kod sumber untuk sistem operasi lain. Selepas menjalankan pemasang, anda boleh mengesahkan kedua -dua node.js dan npm dari baris arahan.
assert<span>.equal(sum, 4, "sum should equal 4");</span>
segala -galanya yang kita perlukan boleh didapati dengan mudah sebagai pakej nod. Pengurus Pakej Node boleh mengendalikan pemasangan mereka, serta sebarang kebergantungan.
<span>expect(sum).to.equal(4);</span>
Kod sumber untuk contoh ini termasuk struktur projek lengkap dengan 15 fail berikut:
sum<span>.should.equal(4);</span>
inilah yang setiap folder dan fail mengandungi:
Semasa pembangunan, kami hanya berminat dengan tiga fail ini, testem.json, src/app-todos.js, dan ujian/app-todos-test.js.
Langkah terakhir sebelum pembangunan sebenar menentukan konfigurasi Test'em. Konfigurasi itu berada dalam testem.json yang diformat JSON, dan ia cukup mudah untuk dibuat dalam mana-mana editor teks. Kami hanya menyatakan bahawa kami menggunakan mocha (test'em menyokong beberapa rangka kerja), dan kami menyenaraikan fail JavaScript permohonan kami dan kod ujian kami memerlukan.
<span>var sum = 2 + 2;</span>
Akhirnya, kami sudah bersedia untuk kod. Dalam shell arahan, navigasi ke folder root projek kami dan laksanakan testem perintah. Skrip ujian akan berjalan, membersihkan tetingkap terminal dan memberi kita URL di sebelah kanan atas. Salin dan tampal URL ke dalam penyemak imbas pilihan kami dan kami pergi.
Sebaik sahaja kami melancarkan pelayar web, ia secara automatik akan melaksanakan sebarang ujian yang telah kami tentukan. Oleh kerana kita baru memulakan pembangunan, kita tidak akan mempunyai sebarang kod, atau sebarang kes ujian. Penyemak imbas akan menunjuk kepada kami.
Tetingkap terminal dari mana kami melancarkan Test'em juga akan memberi kami status.
Dalam semangat pembangunan yang didorong oleh ujian yang benar, kami akan bermula dengan menulis kes ujian pertama kami dalam fail ujian/app-todos-test.js. Seperti mana -mana aplikasi web yang baik, kami mahu meminimumkan pencemaran ruang nama global. Untuk melakukan itu, kami akan bergantung kepada pemboleh ubah global tunggal, TodoApp, untuk mengandungi semua kod kami. Kes ujian pertama kami akan memastikan bahawa pembolehubah ruang nama global wujud.
<span>var sum = 2 + 2;</span>
Seperti yang anda lihat, kami memerlukan satu pernyataan awal untuk memberitahu Mocha bahawa kami menggunakan pernyataan chai. Kemudian kita boleh mula menulis ujian. Dengan ujian JavaScript konvensyen dianjurkan ke dalam blok (yang boleh bersarang ke dalam sub-blok, dan sebagainya). Setiap blok bermula dengan panggilan fungsi () untuk mengenal pasti bahagian kod yang kami uji. Dalam kes ini kami sedang menguji aplikasi keseluruhan, jadi itulah parameter pertama untuk menggambarkan ().
Dalam blok ujian, kami mendokumenkan setiap kes ujian dengan apa yang diuji. Itulah tujuan fungsi IT (). Cara untuk membaca mana -mana kes ujian adalah untuk menggabungkan gambaran () dan ia () rentetan ke dalam satu pernyataan. Oleh itu, kes ujian pertama kami ialah
Aplikasi membuat pemboleh ubah global untuk ruang nama
Kod ujian itu sendiri berada di dalam blok IT (). Kes ujian kami ialah
assert<span>.equal(sum, 4, "sum should equal 4");</span>
Sekarang kita mempunyai kes ujian lengkap. Sebaik sahaja kami menyimpan fail, test`em secara automatik mengambil alih. Ia mendapati bahawa salah satu fail kami telah berubah, jadi ia segera mengubah ujian. Tidak menghairankan (kerana kami belum menulis sebarang kod untuk permohonan itu), ujian pertama kami gagal.
kemas kini tetingkap terminal secara automatik juga.
Untuk membuat lulus ujian, kita mesti membuat pemboleh ubah ruang nama global. Kami beralih ke fail srcapp-todos.js dan menambah kod yang diperlukan.
<span>expect(sum).to.equal(4);</span>
sebaik sahaja kami menyimpan fail, test`em sekali lagi muncul untuk bertindak. Kami segera mendapat keputusan yang dikemas kini untuk kes ujian kami.
Langkah mundur seketika dan pertimbangkan apa yang berlaku! Setiap kali kita membuat perubahan, sama ada ke kod ujian atau permohonan kami, Test`em segera menjalankan semula keseluruhan ujian kami. Apa yang perlu kita lakukan ialah menyimpan pelayar Test'em atau tetingkap terminal yang dapat dilihat di sudut skrin kami, dan kami dapat melihat kesihatan kod kami dalam masa nyata, seperti yang kita sedang membangunkan . Kami akan tahu sebaik sahaja kami memperkenalkan pepijat, walaupun bug itu menunjukkan dirinya dalam sebahagian daripada kod yang berbeza dari mana kami bekerja. Tidak lagi menggali kembali melalui jam, hari, atau minggu kod baru untuk mengetahui apabila kami memperkenalkan bug.
Dengan persekitaran pembangunan kami kini ditubuhkan sepenuhnya, kami boleh mula membangunkan aplikasi. Oleh kerana aplikasi kami menunjukkan senarai todos, mungkin baik untuk membuat model untuk todos. Model ini perlu menjejaki kedua -dua tajuk todo dan status itu. Mari tambahkan ujian unit yang mengesahkan kita boleh membuat todo dengan mungkir yang munasabah.
<span>var sum = 2 + 2;</span>
Terdapat beberapa aspek ujian ini yang perlu diperhatikan.
Sudah tentu, kerana kami belum menulis kod model, semua ujian kami akan gagal. (Dan kita akan tahu dengan serta -merta.) Tetapi apabila kita telah menambah kod untuk model kami, ujian lulus dan kami sedang dalam perjalanan.
assert<span>.equal(sum, 4, "sum should equal 4");</span>
Sekarang kita mempunyai model mudah untuk Todos, kita boleh mula menentukan tingkah lakunya. Satu perkara yang harus dilakukan oleh model kami ialah mengemas kini pangkalan data apabila mana -mana sifatnya berubah. Walau bagaimanapun, dalam persekitaran ujian unit, kami tidak akan mempunyai pangkalan data sebenar untuk diperiksa. Sebaliknya, kami sebenarnya tidak menulis sebarang kod untuk melakukan kemas kini pangkalan data. Sebaliknya, kami bergantung pada tulang belakang untuk mengendalikan interaksi itu. Itu mencadangkan strategi ujian unit untuk kes ujian ini. Apa yang perlu kita ketahui ialah model tulang belakang menggunakan kaedah SAVE () untuk mengemas kini apa sahaja kedai sokongan yang berterusan model. Dalam kes kami, kedai sokongan adalah pangkalan data. Inilah kod ujian unit yang boleh kita gunakan:
<span>expect(sum).to.equal(4);</span>
Kami telah memasukkan beberapa kod tambahan sebelum setiap ujian, dan kami telah menambah seksyen kod untuk dilaksanakan selepas setiap ujian. Kod tambahan itu menguruskan stub sinon, fungsi yang secara berkesan membatalkan fungsi lain dalam kod. Dalam kes kami, stub membatalkan kaedah simpanan () ini.todo ini. Dengan stub di tempat, panggilan ke kaedah tidak akan pergi ke perpustakaan belakang. Sebaliknya, Sinon memintas panggilan tersebut dan hanya kembali dengan segera. Tingkah laku ini penting. Jika kami cuba melaksanakan kaedah Backbone Save () sebenar dalam persekitaran ujian unit, panggilan akan gagal kerana tidak akan ada pangkalan data atau API pelayan yang tersedia.
Dengan stub di tempat, kes ujian kami boleh menggunakannya untuk mengesahkan tingkah laku model. Dalam kes ujian pertama, kami segera menetapkan tajuk Todo kepada nilai baru. Oleh kerana itu mengubah harta tajuk, kami mahu model kami mengemas kini kedai sokongannya. Untuk memeriksa bahawa kami hanya mengesahkan bahawa stub dipanggil. Untuk mendapatkan model kami untuk lulus ujian ini, kami boleh mencari peristiwa perubahan dan bertindak balas dengan sewajarnya.
<span>var sum = 2 + 2;</span>
Sudah tentu, aplikasi kami tidak akan melakukan apa -apa yang baik jika ia tidak benar -benar memaparkan todos kepada pengguna, dan itu memerlukan membuat beberapa HTML. Kami akan menggunakan pandangan tulang belakang untuk fungsi itu. Dalam aplikasi remeh kami, kami hanya ingin menjadikan setiap todo sebagai item senarai. Berikut adalah kes ujian yang akan memulakan kita.
assert<span>.equal(sum, 4, "sum should equal 4");</span>
Kami memulakan ujian pandangan kami dengan dua kes ujian. Mula -mula kita memastikan bahawa kaedah render () paparan mengembalikan pandangan itu sendiri. Itulah konvensyen yang biasa dan sangat mudah di tulang belakang kerana ia membolehkan kaedah chaining. Kes ujian kedua kami mengesahkan bahawa elemen HTML yang dibuat adalah item senarai (
<span>expect(sum).to.equal(4);</span>
Seterusnya, kita boleh membangunkan kandungan terperinci paparan item senarai itu. Sebagai contoh, kami mahu item senarai penuh untuk melihat sesuatu seperti yang berikut.
sum<span>.should.equal(4);</span>
Untuk kes ujian kami, kami boleh mengambil kesempatan daripada jQuery untuk mengekstrak elemen individu dari elemen utama pandangan.
CREATE TABLE `todos` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary key for the table.', `title` varchar(256) NOT NULL DEFAULT '' COMMENT 'The text for the todo item.', `complete` bit(1) NOT NULL DEFAULT b'0' COMMENT 'Boolean indicating whether or not the item is complete.', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='To Do items.'
Perhatikan bahawa dalam kes ujian terakhir kami telah meretas kaedah SAVE () model. Oleh kerana kami menukar harta dari nilai lalai, model kami akan dengan penuh semangat cuba untuk meneruskan perubahan ke kedai sokongannya. Walau bagaimanapun, dalam persekitaran ujian unit, kami tidak akan mempunyai pangkalan data atau API pelayan. Stub mengambil tempat komponen yang hilang dan membolehkan ujian diteruskan tanpa kesilapan. Untuk mendapatkan ujian ini, kami perlu menambah beberapa kod tambahan kepada pandangan kami.
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><title</span>></span><span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h1</span>></span>List of Todos<span><span></h1</span>></span> </span> <span><span><span><script</span> src<span>="lib/jquery-1.9.0.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="lib/underscore-min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="lib/backbone-min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="src/app-todos.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span>></span><span> </span></span><span><span> <span>$(function () { </span></span></span><span><span> <span>var todos = new todoApp<span>.Todos</span>(); </span></span></span><span><span> todos<span>.fetch(); </span></span></span><span><span> <span>var list = new todoApp<span>.TodosList</span>({collection: todos}); </span></span></span><span><span> <span>$("body").append(list.el); </span></span></span><span><span> <span>}) </span></span></span><span><span> </span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Sekarang bahawa kami telah mengesahkan bahawa pelaksanaan pandangan kami mencipta markup HTML yang betul, kami dapat menguji interaksi dengan model kami. Khususnya, kami ingin memastikan pengguna boleh menukar status todo dengan mengklik pada kotak semak. Persekitaran ujian kami tidak memerlukan pengguna manusia yang sebenar, jadi kami akan menggunakan jQuery untuk menghasilkan acara klik. Walau bagaimanapun, untuk melakukan itu, kita perlu menambah kandungan ke DOM yang sebenar. Kandungan itu dikenali sebagai ujian perlawanan . Berikut adalah kod ujian unit.
bash-3.2$ node --version v0.8.18 bash-3.2$ npm --version 1.2.2 bash-3.2$
Perhatikan bahawa kami sekali lagi menetas kaedah SAVE () TODO. Jika tidak, Backbone akan cuba mengemas kini kedai sokongan yang tidak wujud apabila kami menukar status Todo dengan klik simulasi kami.
Untuk kes ujian itu sendiri, kita mulakan dengan membuat elemen
<span>var sum = 2 + 2;</span>
Dalam paparan, kami ingin menangkap acara klik pada elemen
assert<span>.equal(sum, 4, "sum should equal 4");</span>
Pada masa ini permohonan kami hampir selesai. Satu -satunya fungsi yang tersisa adalah mengumpul semua todos bersama -sama. Sememangnya, kami akan menggunakan koleksi tulang belakang. Kami sebenarnya tidak akan melakukan apa -apa yang istimewa dengan koleksi kami, jadi kami tidak memerlukan sebarang ujian unit.
<span>expect(sum).to.equal(4);</span>
kita boleh mengesahkan bahawa pelaksanaan pandangan koleksi kami adalah sesuai. Kami mahu pandangan yang diberikan sebagai senarai yang tidak teratur (
sum<span>.should.equal(4);</span>
Pelaksanaan pandangan juga mudah. Ia menjejaki sebarang penambahan ke koleksi dan mengemas kini paparan. Untuk render awal () ia hanya menambah semua model dalam koleksi satu demi satu.
CREATE TABLE `todos` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary key for the table.', `title` varchar(256) NOT NULL DEFAULT '' COMMENT 'The text for the todo item.', `complete` bit(1) NOT NULL DEFAULT b'0' COMMENT 'Boolean indicating whether or not the item is complete.', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='To Do items.'
Kerana API REST kami sempurna sepadan dengan API yang diharapkan oleh tulang belakang, kami tidak memerlukan sebarang kod tersuai untuk menguruskan interaksi API. Akibatnya, kami tidak memerlukan sebarang kes ujian unit. Di dunia nyata, anda mungkin tidak begitu bernasib baik. Jika API anda tidak mematuhi konvensyen tulang belakang, anda mungkin perlu menimpa atau melanjutkan beberapa kod tulang belakang untuk menangani API yang tidak standard. Kod tambahan itu memerlukan ujian unit juga. Mujurlah, ia agak mudah untuk menguji interaksi API, walaupun dalam persekitaran ujian unit.
Cara paling mudah untuk menguji interaksi API bergantung pada fungsi pelayan palsu Sinon.js. Malangnya, fungsi itu hanya tersedia (pada masa ini) dalam pelaksanaan pelayar Sinon. Ia secara eksplisit dikecualikan daripada pelaksanaan Node.js. Terdapat beberapa hacks untuk mendapatkannya berjalan di node.js, tetapi hacks itu agak rapuh dan bergantung pada butiran pelaksanaan dalaman. Adalah lebih baik untuk mengelakkan mereka jika boleh. Nasib baik, kita boleh mendapatkan tanpa pelayan palsu Sinon.
Rahsia mengetahui bahawa Backbone bergantung pada fungsi JQuery's $ .ajax () untuk melaksanakan API REST. Kita boleh memintas interaksi API dengan menonjolkan fungsi itu. Apabila kita melengkapkan fungsi, kita akan mahu menggantikan respons kita sendiri. Kaedah hasil () stub memberikan kita peluang itu. Ia memberitahu Sinon apa tindakan tambahan yang perlu diambil apabila stub dipanggil. Berikut adalah kes ujian lengkap untuk mengesahkan bahawa koleksi kami dengan betul memulakan sendiri menggunakan API REST.
<span>var sum = 2 + 2;</span>
Seperti yang anda lihat dari pukulan skrin yang berikut, kami kini telah menulis kod yang melepasi semua kes ujian unit. Buat masa ini sekurang -kurangnya, pembangunan selesai.
Sekarang perkembangan klien aplikasi kami selesai (dan kami mempunyai ujian untuk membuktikannya), kami dengan selamat boleh memasukkan JavaScript kami ke dalam sistem pengurusan kod sumber. Ia kemudiannya boleh diintegrasikan ke dalam proses membina untuk keseluruhan aplikasi. Sebagai sebahagian daripada proses itu, kami mahu melaksanakan semua kes ujian yang telah kami usahakan. Ini akan memastikan bahawa kod yang membentuk penggunaan akhir melepasi semua ujian yang telah kami tentukan. Ia juga akan melindungi daripada "tweak kecil" kepada kod yang secara tidak sengaja memperkenalkan pepijat baru.
Semasa proses binaan, kami mungkin ingin melaksanakan ujian kami dari baris arahan dan bukannya dalam pelayar web. Kami tidak memerlukan butiran kes ujian individu, hanya jaminan bahawa mereka semua lulus. Node.js menjadikannya cukup mudah untuk menampung keperluan ini. Kami hanya perlu membuat beberapa tambahan kecil ke kod sumber kami dan fail kod ujian unit.
Kod kami memerlukan pengubahsuaian ini kerana Node.js mengendalikan pembolehubah global secara berbeza daripada pelayar web. Dalam pelayar web, pembolehubah JavaScript adalah, secara lalai, global dalam skop. Node.js, sebaliknya, mengurung pembolehubah ke modul tempatan mereka secara lalai. Dalam persekitaran itu, kod kami tidak akan dapat mencari perpustakaan pihak ketiga yang diperlukan (jQuery, underscore, dan tulang belakang. Jika kami menambah pernyataan berikut pada mulanya, node.js akan menyelesaikan rujukan kepada perpustakaan ini dengan sewajarnya . Kami telah membina kenyataan ini supaya mereka tidak membahayakan penyemak imbas web, jadi kami boleh meninggalkannya dalam kod secara kekal.
assert<span>.equal(sum, 4, "sum should equal 4");</span>Kami juga perlu menyesuaikan kod ujian kami. Skrip ujian memerlukan akses ke perpustakaan mereka sendiri (jQuery, chai, sinon.js, dan sinon-chai). Di samping itu, kita perlu menambah sedikit tambahan untuk mensimulasikan model objek dokumen pelayar web (DOM). Ingatlah bahawa ujian kami untuk pengendalian klik memerlukan kami untuk sementara menambah "perlawanan"
<span>var sum = 2 + 2;</span>
Bersyarat yang membungkus ujian pernyataan ini untuk melihat sama ada kita berjalan di persekitaran Node.js dan bukannya pelayar web. Dalam penyemak imbas, pernyataan tambahan tidak diperlukan, jadi kami dapat melangkauinya dengan selamat.
Dengan perubahan itu, kita boleh melaksanakan suite ujian penuh dari baris arahan. Hanya navigasi ke folder root projek dan laksanakan perintah mocha. Hasilnya kelihatan agak biasa.
Sudah tentu, Mocha mengembalikan tahap keluar untuk menunjukkan sama ada atau tidak semua ujian yang diluluskan. Itu membolehkan kita mengautomasikan ujian sebagai sebahagian daripada proses integrasi yang berterusan, atau hanya sebagai skrip pra-komite tempatan untuk memelihara kewarasan kita sendiri.
Pada ketika ini kami telah mencapai matlamat kami. Kami mempunyai persekitaran ujian unit yang berjalan di latar belakang semasa pembangunan dan segera memberitahu kami apabila sebarang ujian gagal. Ujian dilaksanakan dalam pelayar web, memberikan kami akses penuh ke alat pembangunan pelayar semasa kami pengekodan. Ujian yang sama juga berjalan dengan baik dari skrip baris arahan, jadi kami boleh mengautomasikan pelaksanaannya semasa proses binaan atau integrasi.
Berikut adalah sumber ujian unit utama yang digunakan dalam artikel.
Beberapa amalan terbaik untuk ujian unit dalam tulang belakang.js termasuk menulis ujian kecil dan fokus yang meliputi satu fungsi, menjaga ujian bebas antara satu sama lain , dan menguji semua kes kelebihan yang mungkin. Ia juga penting untuk menulis ujian sebelum menulis kod sebenar, amalan yang dikenali sebagai pembangunan yang didorong oleh ujian (TDD). Ini memastikan bahawa kod anda boleh diuji dan membantu anda merancang perisian yang lebih baik.
Laporan untuk mengenal pasti punca kegagalan. Rangka kerja yang paling banyak memberikan mesej ralat terperinci yang dapat membantu anda menentukan masalah. Anda juga boleh menggunakan alat debugging seperti devtools Chrome atau debugger node.js untuk melangkah melalui kod anda dan memeriksa pembolehubah dan panggilan fungsi.
Ya, anda boleh menggunakan mocks dan stubs dalam unit ujian Backbone.js. Mocks dan stubs adalah objek palsu yang mensimulasikan tingkah laku objek sebenar. Mereka digunakan untuk mengasingkan komponen yang diuji dari seluruh sistem. Ini menjadikan ujian lebih dipercayai dan mudah ditulis. Terdapat beberapa perpustakaan yang tersedia, seperti sinon.js, yang menyediakan fungsi untuk membuat dan menguruskan mocks dan stubs. Prestasi ujian unit dalam tulang belakang.js melibatkan mengoptimumkan ujian dan persekitaran ujian anda. Ini termasuk menulis ujian yang cekap yang melaksanakan dengan cepat, menjalankan ujian selari, dan menggunakan rangka kerja ujian yang cepat. Anda juga boleh menggunakan alat profil untuk mengenal pasti ujian perlahan dan kesesakan dalam proses ujian anda.
Atas ialah kandungan terperinci Permohonan Ujian Unit Backbone.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!