Jalankan pengujian unit untuk aplikasi Node.js dari GitHub dengan menggunakan AWS CodeBuild - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Jalankan pengujian unit untuk aplikasi Node.js dari GitHub dengan menggunakan AWS CodeBuild

Thomas Scott dan Jean-Baptiste Guillois, Amazon Web Services

Ringkasan

Pola ini menyediakan contoh kode sumber dan komponen pengujian unit kunci untuk API game Node.js. Ini juga mencakup instruksi untuk menjalankan pengujian unit ini dari GitHub repositori dengan menggunakan AWS CodeBuild, sebagai bagian dari alur kerja integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) Anda.

Pengujian unit adalah proses pengembangan perangkat lunak di mana berbagai bagian aplikasi, yang disebut unit, diuji secara individual dan independen untuk operasi yang benar. Pengujian memvalidasi kualitas kode dan mengkonfirmasi bahwa itu berfungsi seperti yang diharapkan. Pengembang lain juga dapat dengan mudah mendapatkan keakraban dengan basis kode Anda dengan berkonsultasi dengan tes. Tes unit mengurangi waktu refactoring di masa depan, membantu teknisi mempercepat basis kode Anda lebih cepat, dan memberikan kepercayaan pada perilaku yang diharapkan.

Pengujian unit melibatkan pengujian fungsi individual, termasuk fungsi AWS Lambda. Untuk membuat pengujian unit, Anda memerlukan kerangka pengujian dan cara memvalidasi tes (pernyataan). Contoh kode dalam pola ini menggunakan kerangka pengujian Mocha dan pustaka pernyataan Chai

Untuk informasi selengkapnya tentang pengujian unit dan contoh komponen pengujian, lihat bagian Informasi tambahan.

Prasyarat dan batasan

Arsitektur

Pola ini mengimplementasikan arsitektur yang ditunjukkan pada diagram berikut.

Arsitektur AWS Cloud untuk menjalankan pengujian unit dengan CodeBuild dan GitHub repositori

Alat

Alat

  • Git adalah sistem kontrol versi yang dapat Anda gunakan untuk pengembangan kode.

  • AWS CodeBuild adalah layanan integrasi berkelanjutan yang dikelola sepenuhnya yang mengkompilasi kode sumber, menjalankan pengujian, dan menghasilkan paket perangkat lunak yang siap digunakan. Dengan CodeBuild, Anda tidak perlu menyediakan, mengelola, dan menskalakan server build Anda sendiri. CodeBuild menskalakan terus menerus dan memproses beberapa build secara bersamaan, sehingga build Anda tidak dibiarkan menunggu dalam antrian. Anda dapat memulai dengan cepat menggunakan lingkungan build yang dikemas sebelumnya, atau Anda dapat membuat lingkungan build kustom yang menggunakan alat build Anda sendiri. Dengan CodeBuild, Anda dikenakan biaya per menit untuk sumber daya komputasi yang Anda gunakan.

Kode

Kode sumber untuk pola ini tersedia di GitHub, di repositori aplikasi pengujian unit game Sample. Anda dapat membuat GitHub repositori Anda sendiri dari sampel ini (opsi 1) atau menggunakan repositori sampel secara langsung (opsi 2) untuk pola ini. Ikuti instruksi untuk setiap opsi di bagian berikutnya. Opsi yang Anda ikuti akan tergantung pada kasus penggunaan Anda.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat GitHub repositori Anda sendiri berdasarkan proyek sampel.

  1. Masuk ke GitHub.

  2. Buat repositori baru. Untuk instruksi, lihat GitHub dokumentasi.

  3. Kloning dan dorong repositori sampel ke repositori baru di akun Anda.

Pengembang aplikasi, administrator AWS, AWS DevOps

Buat CodeBuild proyek baru.

  1. Masuk ke AWS Management Console dan buka CodeBuild konsol di https://console.aws.amazon.com/codesuite/codebuild/home.

  2. Pilih Buat proyek build.

  3. Di bagian konfigurasi Proyek, untuk nama Proyek, ketik aws-tests-sample-node-js.

  4. Di bagian Sumber, untuk penyedia Sumber, pilih GitHub.

  5. Untuk Repositori, pilih Repositori di GitHub akun saya, lalu tempel URL ke repositori yang baru Anda buat. GitHub

  6. Di bagian Peristiwa webhook sumber utama, pilih Rebuild setiap kali perubahan kode didorong ke repositori ini.

  7. Untuk jenis acara, pilih PUSH. 

  8. Di bagian Lingkungan, pilih Managed image, Amazon Linux, dan image terbaru.

  9. Tinggalkan pengaturan default untuk semua opsi lain, lalu pilih Buat proyek build.

Pengembang aplikasi, administrator AWS, AWS DevOps

Mulai membangun.

Pada halaman Review, pilih Start build untuk menjalankan build.

Pengembang aplikasi, administrator AWS, AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Buat proyek CodeBuild build baru.

  1. Masuk ke AWS Management Console dan buka CodeBuild konsol di https://console.aws.amazon.com/codesuite/codebuild/home.

  2. Pilih Buat proyek build.

  3. Di bagian konfigurasi Proyek, untuk nama Proyek, ketik aws-tests-sample-node-js.

  4. Di bagian Sumber, untuk penyedia Sumber, pilih GitHub.

  5. Untuk Repositori, pilih Repositori publik, lalu tempel URL:. https://github.com/aws-samples/node-js-tests-sample

  6. Di bagian Lingkungan, pilih Managed image, Amazon Linux, dan image terbaru.

  7. Tinggalkan pengaturan default untuk semua opsi lain, lalu pilih Buat proyek build.

Pengembang aplikasi, administrator AWS, AWS DevOps

Mulai membangun.

Pada halaman Review, pilih Start build untuk menjalankan build.

Pengembang aplikasi, administrator AWS, AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Lihat hasil tes.

Di CodeBuild konsol, tinjau hasil pengujian unit dari CodeBuild pekerjaan. Mereka harus cocok dengan hasil yang ditunjukkan di bagian Informasi tambahan.

Hasil ini memvalidasi integrasi GitHub repositori dengan. CodeBuild 

Pengembang aplikasi, administrator AWS, AWS DevOps

Terapkan webhook.

Anda sekarang dapat menerapkan webhook, sehingga Anda dapat secara otomatis memulai build setiap kali Anda mendorong perubahan kode ke cabang utama repositori Anda. Untuk instruksi, lihat CodeBuild dokumentasi.

Pengembang aplikasi, administrator AWS, AWS DevOps

Sumber daya terkait

Informasi tambahan

Hasil tes unit

Di CodeBuild konsol, Anda akan melihat hasil pengujian berikut setelah proyek berhasil dibangun. 

Hasil yang diharapkan dari unit test

Contoh komponen uji unit

Bagian ini menjelaskan empat jenis komponen uji yang digunakan dalam pengujian unit: pernyataan, mata-mata, rintisan, dan tiruan. Ini mencakup penjelasan singkat dan contoh kode dari setiap komponen. 

Pernyataan

Pernyataan digunakan untuk memverifikasi hasil yang diharapkan. Ini adalah komponen pengujian yang penting karena memvalidasi respons yang diharapkan dari fungsi yang diberikan. Contoh pernyataan berikut memvalidasi bahwa ID yang dikembalikan adalah antara 0 dan 1000 saat menginisialisasi game baru.

const { expect } = require('chai'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { const game = new Game(); expect(game.id).is.above(0).but.below(1000) }); });

Mata-mata

Mata-mata digunakan untuk mengamati apa yang terjadi ketika suatu fungsi sedang berjalan. Misalnya, Anda mungkin ingin memvalidasi bahwa fungsi telah dipanggil dengan benar. Contoh berikut menunjukkan bahwa metode start dan stop dipanggil pada objek kelas Game.

const { expect } = require('chai'); const { spy } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('should verify that the correct function is called', () => { const spyStart = spy(Game.prototype, "start"); const spyStop = spy(Game.prototype, "stop"); const game = new Game(); game.start(); game.stop(); expect(spyStart.called).to.be.true expect(spyStop.called).to.be.true }); });

Rintisan

Sebuah rintisan digunakan untuk mengganti respons default fungsi. Ini sangat berguna ketika fungsi membuat permintaan eksternal, karena Anda ingin menghindari membuat permintaan eksternal dari pengujian unit. (Permintaan eksternal lebih cocok untuk pengujian integrasi, yang secara fisik dapat menguji permintaan antara komponen yang berbeda.) Dalam contoh berikut, sebuah rintisan memaksa ID kembali dari fungsi getID.

const { expect } = require('chai'); const {.stub } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { let generateIdStub = stub(Game.prototype, 'getId').returns(999999); const game = new Game(); expect(game.getId).is.equal(999999); generateIdStub.restore(); }); });

Mengolok-olok

Mock adalah metode palsu yang memiliki perilaku yang telah diprogram sebelumnya untuk menguji skenario yang berbeda. Mock dapat dianggap sebagai bentuk rintisan yang diperluas dan dapat melakukan banyak tugas secara bersamaan. Dalam contoh berikut, tiruan digunakan untuk memvalidasi tiga skenario:

  • Fungsi ini disebut 

  • Fungsi disebut dengan argumen

  • Fungsi mengembalikan bilangan bulat 9

const { expect } = require('chai'); const {.mock } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { let mock = mock(Game.prototype).expects('getId').withArgs().returns(9); const game = new Game(); const id = get.getId(); mock.verify(); expect(id).is.equal(9); }); });