Rumah hujung hadapan web tutorial js Uji program halaman AngularJS menggunakan Jasmine dan Karma_node.js

Uji program halaman AngularJS menggunakan Jasmine dan Karma_node.js

May 16, 2016 pm 03:12 PM
angularjs javascript js ujian

AngularJS ialah perkara terbaik yang berlaku kepada JavaScript sejak jQuery. Ini adalah cara pembangunan JavaScript sentiasa dimaksudkan. Salah satu kelebihan utama Angular ialah suntikan kebergantungannya (Suntikan Ketergantungan), yang sangat mudah untuk ujian unit kod. Tapi yang pelik sikit saya tak jumpa tutorial macam mana nak buat unit testing.

Sudah tentu terdapat banyak cadangan yang baik: menggunakan rangka kerja ujian Jasmine dan pelaksana ujian Karma (Test Runner); tetapi tiada tutorial lengkap tentang cara menguji dari awal. Jadi saya menulis artikel ini. Saya menemui banyak sumber dalam talian untuk mengetahui cara melakukannya, dan anda tidak perlu melakukan apa-apa daripada itu sekarang (jika anda membaca artikel ini dari awal).

Sila beritahu saya sebarang ralat yang anda lihat sehingga saya boleh mengatakan ini adalah amalan terbaik untuk menguji apl Angular berdasarkan Karma dan Jasmine.

Pengenalan

Artikel ini akan membimbing anda untuk memasang semua alatan yang anda perlukan untuk menggunakan Karma dan Jasmine untuk ujian automatik. Saya tidak kisah jika anda benar-benar menggunakan TDD (Test Driven Development) atau TAD (Test Assisted Development), untuk tujuan artikel ini saya mengandaikan anda sudah mempunyai fail untuk diuji.

Pasang Karma

Jika anda tidak memasang Node.js, sila muat turun dan pasang sendiri. Selepas pemasangan, buka terminal atau baris arahan dan masukkan arahan:

1

npm install -g karma

Salin selepas log masuk

Struktur fail

Struktur fail tidak berkait rapat dengan topik kami, tetapi dalam ujian berikut, struktur fail yang saya gunakan adalah seperti berikut:

1

2

3

4

5

6

7

8

9

10

Application

| angular.js

| angular-resource.js

| Home

 | home.js

| Tests

 | Home

 | home.tests.js

 | karma.config.js (will be created in the next step)

 | angular-mocks.js

Salin selepas log masuk

*Saya tidak menyokong struktur dokumen ini, saya menunjukkannya hanya sebagai contoh ujian.

Konfigurasikan Karma

Tukar ke direktori di mana anda ingin meletakkan fail konfigurasi, kemudian masukkan arahan berikut dalam terminal untuk mencipta fail konfigurasi:

1

karma init karma.config.js

Salin selepas log masuk

Anda akan ditanya beberapa soalan, termasuk rangka kerja ujian yang ingin anda gunakan, sama ada anda memerlukan fail pemantauan automatik, ujian dan fail yang diuji yang disertakan, dsb. Dalam tutorial kami, kami mengekalkan 'Jasmine' sebagai rangka kerja lalai kami, mendayakan pengesanan fail automatik dan memasukkan fail berikut:

1

2

3

4

../*.js

../**.*.js

angular-mocks.js

**/*.tests.js

Salin selepas log masuk

Ini adalah laluan relatif, termasuk 1) semua fail .js dalam direktori induk, 2) semua fail .js dalam semua subdirektori di bawah direktori induk, 3) angular-mock.js dalam direktori semasa, 4) Dan semua Fail .tests.js dalam direktori semasa (termasuk subdirektori) (Saya suka membezakan fail ujian daripada fail lain dengan cara ini).

Tidak kira apa fail yang anda pilih, pastikan anda memasukkan angular.js, angular-mock.js dan fail lain yang perlu anda gunakan.

Mulakan Karma

Kini anda boleh mulakan Karma, masih masuk ke terminal:

1

karma start karma.config.js

Salin selepas log masuk

Arahan ini akan melancarkan penyemak imbas yang anda senaraikan dalam fail konfigurasi pada komputer anda. Penyemak imbas ini akan menyambung ke contoh Karma melalui soket Anda akan melihat senarai penyemak imbas yang aktif dan dimaklumkan sama ada mereka menjalankan ujian. Saya harap Karma memberi anda ringkasan keputusan ujian akhir pada setiap penyemak imbas (cth. 15 daripada 16 lulus, 1 gagal), tetapi malangnya anda hanya boleh melihat maklumat ini melalui tetingkap terminal.

Salah satu ciri Karma yang menonjol ialah anda boleh menyambung dan menguji kod anda menggunakan mana-mana peranti pada rangkaian. Cuba halakan penyemak imbas mudah alih anda ke perkhidmatan Karma Anda boleh menemui URL ujian dalam mana-mana penyemak imbas yang dijalankan pada komputer anda. Ia sepatutnya kelihatan seperti: http://localhost:9876/?id=5359192. Anda boleh menghalakan penyemak imbas telefon anda, mesin maya atau mana-mana peranti lain ke [alamat IP anda pada rangkaian]:9876/?id=5359192 Kerana Karma menjalankan contoh Node.js, mesin ujian anda Sama seperti web pelayan, ujian akan dihantar ke mana-mana penyemak imbas yang ditunjukkan kepadanya.

Ujian asas

Kami menganggap anda sudah mempunyai fail untuk diuji. Fail home.js yang ingin kami gunakan adalah seperti berikut:

home.js

1

2

3

4

5

6

7

8

9

10

11

12

'use strict';

  

var app = angular.module('Application', ['ngResource']);

  

app.factory('UserFactory', function($resource){

 return $resource('Users/users.json')

});

  

app.controller('MainCtrl', function($scope, UserFactory) {

 $scope.text = 'Hello World!';

 $scope.users = UserFactory.get();

});

Salin selepas log masuk

Kami boleh mencipta kes ujian kami dalam fail home.test.js. Mari kita mulakan dengan ujian mudah: $scope.text sepatutnya sama dengan 'Hello World!'. Untuk melengkapkan ujian ini, kami perlu mengejek modul Aplikasi kami dan pembolehubah $scope. Kami akan melakukan ini dalam kaedah beforeEach Jasmine supaya kami mempunyai pengawal dan objek skop yang baharu (bersih) pada permulaan setiap kes ujian.

home.tests.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

'use strict';

  

describe('MainCtrl', function(){

 var scope;

//我们会在测试中使用这个scope

  

  

//模拟我们的Application模块并注入我们自己的依赖

 beforeEach(angular.mock.module('Application'));

  

//模拟Controller,并且包含 $rootScope 和 $controller

 beforeEach(angular.mock.inject(function($rootScope, $controller){

   

//创建一个空的 scope

  scope = $rootScope.$new();

   

//声明 Controller并且注入已创建的空的 scope

  $controller('MainCtrl', {$scope: scope});

 });

  

// 测试从这里开始

});

Salin selepas log masuk

Anda boleh melihat daripada kod bahawa kami menyuntik skop kami sendiri supaya kami boleh mengesahkan maklumatnya di luarnya. Juga, jangan lupa untuk mengejek modul itu sendiri (baris 7)! Kami kini bersedia untuk ujian:

home.tests.js

1

2

3

4

// 测试从这里开始

it('should have variable text = "Hello World!"', function(){

 expect(scope.text).toBe('Hello World!);

});

Salin selepas log masuk

如果你运行这个测试,它可以在任何指向Karma的浏览器中执行,并且测试通过。

发送$resource请求

现在我们已经准备好测试 $resource 请求。要完成这个请求,我们需要使用到 $httpBackend, 它一个模拟版本的Angular $http。我们会创建另一个叫做 $httpBackend 的变量,在第二个 beforEach块中,注入 _$httpBackend_ 并将新创建的变量指向 _$httpBackend_。接下来我们会告诉 $httpBackend 如何对请求做出响应。

1

2

$httpBackend = _$httpBackend_;

$httpBackend.when('GET', 'Users/users.json').respond([{id: 1, name: 'Bob'}, {id:2, name: 'Jane'}]);

Salin selepas log masuk

我们的测试: home.tests.js

1

2

3

4

5

it('should fetch list of users', function(){

   $httpBackend.flush();

   expect(scope.users.length).toBe(2);

   expect(scope.users[0].name).toBe('Bob');

  });

Salin selepas log masuk

都放到一起

home.tests.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

'use strict';

  

describe('MainCtrl', function(){

 var scope, $httpBackend;

//we'll use these in our tests

  

  

//mock Application to allow us to inject our own dependencies

 beforeEach(angular.mock.module('Application'));

  

//mock the controller for the same reason and include $rootScope and $controller

 beforeEach(angular.mock.inject(function($rootScope, $controller, _$httpBackend_){

  $httpBackend = _$httpBackend_;

  $httpBackend.when('GET', 'Users/users.json').respond([{id: 1, name: 'Bob'}, {id:2, name: 'Jane'}]);

  

   

//create an empty scope

  scope = $rootScope.$new();

   

//declare the controller and inject our empty scope

  $controller('MainCtrl', {$scope: scope});

 });

  

// tests start here

 it('should have variable text = "Hello World!"', function(){

  expect(scope.text).toBe('Hello World!');

 });

 it('should fetch list of users', function(){

  $httpBackend.flush();

  expect(scope.users.length).toBe(2);

  expect(scope.users[0].name).toBe('Bob');

 });

});

Salin selepas log masuk

技巧

Karma会运行所有文件中的所有测试用例,如果你只想运行所有测试的一个子集,修改 describe 或 it 为 ddescribe 或 iit 来运行个别的一些测试。如果有些测试你不想运行他们,那么修改 describe 或 it 为 xdescribe 或 xit 来忽略这些代码。

你也可以在html文件的页面上运行你的测试。举例的代码如下:
home.runner.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<!DOCTYPE html>

<html>

<head>

 <title>Partner Settings Test Suite</title>

  

<!-- include your script files (notice that the jasmine source files have been added to the project) -->

 <script type="text/javascript" src="../jasmine/jasmine-1.3.1/jasmine.js"></script>

 <script type="text/javascript" src="../jasmine/jasmine-1.3.1/jasmine-html.js"></script>

 <script type="text/javascript" src="../angular-mocks.js"></script>

 <script type="text/javascript" src="home.tests.js"></script>

 <link rel="stylesheet" href="../jasmine/jasmine-1.3.1/jasmine.css"/>

</head>

<body>

  

<!-- use Jasmine to run and display test results -->

 <script type="text/javascript">

  var jasmineEnv = jasmine.getEnv();

  jasmineEnv.addReporter(new jasmine.HtmlReporter());

  jasmineEnv.execute();

 </script>

</body>

</html>

Salin selepas log masuk

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah pendapat anda tentang furmark - Bagaimanakah furmark dianggap layak? Apakah pendapat anda tentang furmark - Bagaimanakah furmark dianggap layak? Mar 19, 2024 am 09:25 AM

Apakah pendapat anda tentang furmark? 1. Tetapkan "Mod Jalankan" dan "Mod Paparan" dalam antara muka utama, dan juga laraskan "Mod Ujian" dan klik butang "Mula". 2. Selepas menunggu seketika, anda akan melihat keputusan ujian, termasuk pelbagai parameter kad grafik. Bagaimanakah furmark layak? 1. Gunakan mesin pembakar furmark dan semak hasilnya selama kira-kira setengah jam Ia pada asasnya berlegar sekitar 85 darjah, dengan puncak 87 darjah dan suhu bilik 19 darjah. Casis besar, 5 port kipas casis, dua di hadapan, dua di atas, dan satu di belakang, tetapi hanya satu kipas dipasang. Semua aksesori tidak overclock. 2. Dalam keadaan biasa, suhu biasa kad grafik hendaklah antara "30-85℃". 3. Walaupun suhu ambien terlalu tinggi pada musim panas, suhu biasa ialah "50-85℃"

Disyorkan: Projek pengesanan dan pengecaman muka sumber terbuka JS yang sangat baik Disyorkan: Projek pengesanan dan pengecaman muka sumber terbuka JS yang sangat baik Apr 03, 2024 am 11:55 AM

Teknologi pengesanan dan pengecaman muka adalah teknologi yang agak matang dan digunakan secara meluas. Pada masa ini, bahasa aplikasi Internet yang paling banyak digunakan ialah JS Melaksanakan pengesanan muka dan pengecaman pada bahagian hadapan Web mempunyai kelebihan dan kekurangan berbanding dengan pengecaman muka bahagian belakang. Kelebihan termasuk mengurangkan interaksi rangkaian dan pengecaman masa nyata, yang sangat memendekkan masa menunggu pengguna dan meningkatkan pengalaman pengguna termasuk: terhad oleh saiz model, ketepatannya juga terhad. Bagaimana untuk menggunakan js untuk melaksanakan pengesanan muka di web? Untuk melaksanakan pengecaman muka di Web, anda perlu biasa dengan bahasa dan teknologi pengaturcaraan yang berkaitan, seperti JavaScript, HTML, CSS, WebRTC, dll. Pada masa yang sama, anda juga perlu menguasai visi komputer yang berkaitan dan teknologi kecerdasan buatan. Perlu diingat bahawa kerana reka bentuk bahagian Web

Sertai pengembaraan Xianxia baharu! Pramuat turun 'Zhu Xian 2' 'Wuwei Test' kini tersedia Sertai pengembaraan Xianxia baharu! Pramuat turun 'Zhu Xian 2' 'Wuwei Test' kini tersedia Apr 22, 2024 pm 12:50 PM

"Ujian Inaction" bagi MMORPG dongeng fantasi baharu "Zhu Xian 2" akan dilancarkan pada 23 April. Apakah jenis kisah pengembaraan dongeng baharu yang akan berlaku di Benua Zhu Xian beribu-ribu tahun selepas karya asal? The Six Realm Immortal World, akademi abadi sepenuh masa, kehidupan abadi percuma, dan semua jenis keseronokan di dunia abadi sedang menunggu rakan-rakan abadi untuk meneroka secara peribadi! Pra-muat turun "Wuwei Test" kini dibuka Rakan-rakan Fairy boleh pergi ke laman web rasmi untuk memuat turun Anda tidak boleh log masuk ke pelayan permainan sebelum pelayan dilancarkan sudah selesai. Waktu pembukaan "Zhu Xian 2" "Inaction Test": 23 April 10:00 - 6 Mei 23:59 Bab pengembaraan dongeng baharu sekuel ortodoks kepada Zhu Xian "Zhu Xian 2" adalah berdasarkan novel "Zhu Xian" sebagai cetak biru Berdasarkan pandangan dunia karya asal, latar belakang permainan ditetapkan

Raja baharu FPS domestik! Medan Perang 'Operasi Delta' Melebihi Jangkaan Raja baharu FPS domestik! Medan Perang 'Operasi Delta' Melebihi Jangkaan Mar 07, 2024 am 09:37 AM

"Operation Delta" akan melancarkan ujian PC berskala besar yang dipanggil "Codename: ZERO" hari ini (7 Mac). Hujung minggu lalu, permainan ini mengadakan acara pengalaman flash mob luar talian di Shanghai, dan 17173 juga bertuah kerana dijemput untuk mengambil bahagian. Ujian ini hanya tinggal lebih empat bulan lagi daripada kali terakhir, yang membuatkan kami tertanya-tanya, apakah sorotan dan kejutan baharu yang akan dibawa oleh "Operasi Delta" dalam tempoh yang singkat? Lebih empat bulan yang lalu, saya mengalami "Operasi Delta" dalam sesi merasa luar talian dan versi beta pertama. Pada masa itu, permainan hanya membuka mod "Tindakan Berbahaya". Walau bagaimanapun, Operasi Delta sudah mengagumkan pada zamannya. Dalam konteks pengeluar utama yang berpusu-pusu ke pasaran permainan mudah alih, FPS sedemikian yang setanding dengan piawaian antarabangsa

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Hubungan antara js dan vue Hubungan antara js dan vue Mar 11, 2024 pm 05:21 PM

Hubungan antara js dan vue: 1. JS sebagai asas pembangunan Web; 2. Kebangkitan Vue.js sebagai rangka kerja hadapan 3. Hubungan pelengkap antara JS dan Vue; Vue.

Bagaimana untuk melumpuhkan kes ujian di Maven? Bagaimana untuk melumpuhkan kes ujian di Maven? Feb 26, 2024 am 09:57 AM

Maven ialah alat pengurusan projek sumber terbuka yang biasa digunakan untuk tugas seperti membina projek Java, mengurus kebergantungan dan menerbitkan dokumen. Apabila menggunakan Maven untuk binaan projek, kadangkala kita mahu mengabaikan fasa ujian apabila melaksanakan arahan seperti mvnpackage, yang akan meningkatkan kelajuan binaan dalam beberapa kes, terutamanya apabila prototaip atau persekitaran ujian perlu dibina dengan cepat. Artikel ini akan memperincikan cara mengabaikan fasa ujian dalam Maven, dengan contoh kod tertentu. Mengapa Ujian Sering Diabaikan Semasa Pembangunan Projek

PHP Jenkins 101: Satu-satunya cara untuk bermula dengan CI/CD PHP Jenkins 101: Satu-satunya cara untuk bermula dengan CI/CD Mar 09, 2024 am 10:28 AM

Pengenalan Penyepaduan berterusan (CI) dan penggunaan berterusan (CD) ialah amalan utama dalam pembangunan perisian moden yang membantu pasukan menyampaikan perisian berkualiti tinggi dengan lebih pantas dan lebih dipercayai. Jenkins ialah alat CI/CD sumber terbuka yang popular yang mengautomasikan proses binaan, ujian dan penggunaan. Artikel ini menerangkan cara menyediakan saluran paip CI/CD dengan Jenkins menggunakan PHP. Sediakan Jenkins Pasang Jenkins: Muat turun dan pasang Jenkins daripada tapak web rasmi Jenkins. Cipta projek: Cipta projek baharu daripada papan pemuka Jenkins dan namakannya agar sepadan dengan projek php anda. Konfigurasikan kawalan sumber: Konfigurasikan repositori git projek PHP anda sebagai Jenkin

See all articles