Rumah hujung hadapan web tutorial js Cara Ujian Unit dalam JavaScript AngularJS Library_AngularJS

Cara Ujian Unit dalam JavaScript AngularJS Library_AngularJS

May 16, 2016 pm 03:53 PM
angularjs

Pemaju semua bersetuju bahawa ujian unit sangat bermanfaat dalam projek pembangunan. Ia membantu anda memastikan kualiti kod anda, dengan itu memastikan pembangunan yang lebih stabil dan keyakinan yang lebih besar walaupun semasa pemfaktoran semula diperlukan.

201562393334308.png (257×221)

Carta aliran pembangunan dipacu ujian

Tuntutan kod AngularJS tentang kebolehujian yang lebih tinggi sememangnya munasabah. Hanya contoh ujian hujung ke hujung yang disenaraikan dalam dokumen boleh menggambarkan perkara ini. Untuk projek seperti AngularJS, walaupun ujian unit dikatakan mudah, ia tidak mudah untuk melakukannya dengan baik. Walaupun dokumentasi rasmi memberikan contoh terperinci, ia masih sangat mencabar dalam permohonan sebenar saya. Di sini saya hanya akan menunjukkan cara saya mengendalikannya.

Karma Segera

Karma ialah rangka kerja ujian yang dibangunkan oleh pasukan Angular untuk JavaScript. Ia dengan mudah mengautomasikan tugas ujian dan menggantikan operasi manual yang membosankan (seperti set ujian regresi atau memuatkan kebergantungan ujian sasaran Kerjasama antara Karma dan Angular adalah seperti mentega kacang dan jeli.

).

Anda hanya perlu mentakrifkan fail konfigurasi dalam Karma untuk memulakannya, dan kemudian ia akan melaksanakan kes ujian secara automatik dalam persekitaran ujian yang dijangkakan. Anda boleh menentukan persekitaran ujian yang berkaitan dalam fail konfigurasi. angular-seed ialah penyelesaian yang saya sangat mengesyorkan dan boleh dilaksanakan dengan cepat. Konfigurasi Karma dalam projek terbaru saya adalah seperti berikut:

module.exports = function(config) {
  config.set({
    basePath: '../',
 
    files: [
      'app/lib/angular/angular.js',
      'app/lib/angular/angular-*.js',
      'app/js/**/*.js',
      'test/lib/recaptcha/recaptcha_ajax.js',
      'test/lib/angular/angular-mocks.js',
      'test/unit/**/*.js'
    ],
 
    exclude: [
      'app/lib/angular/angular-loader.js',
      'app/lib/angular/*.min.js',
      'app/lib/angular/angular-scenario.js'
    ],
 
    autoWatch: true,
 
    frameworks: ['jasmine'],
 
    browsers: ['PhantomJS'],
 
    plugins: [
      'karma-junit-reporter',
      'karma-chrome-launcher',
      'karma-firefox-launcher',
      'karma-jasmine',
      'karma-phantomjs-launcher'
    ],
 
    junitReporter: {
      outputFile: 'test_out/unit.xml',
      suite: 'unit'
    }
 
  })
}
Salin selepas log masuk


Ini adalah serupa dengan konfigurasi lalai angular-seed tetapi mempunyai perbezaan berikut:

  • Adalah perlu untuk menukar penyemak imbas daripada Chrome kepada PhantomJS, supaya tidak perlu membuka tetingkap penyemak imbas baharu setiap kali anda melompat, tetapi akan berlaku kelewatan tetingkap dalam sistem OSX. Jadi tetapan pemalam dan penyemak imbas telah ditukar.
  • Oleh kerana aplikasi saya perlu merujuk perkhidmatan Recaptcha Google, saya menambah fail kecil recaptcha_ajax.js yang bergantung. Konfigurasi kecil ini semudah menambah baris kod pada fail konfigurasi Karma.

autoWatch ialah tetapan yang sangat keren, ia akan membenarkan Karma kembali secara automatik kepada kes ujian anda apabila terdapat perubahan fail. Anda boleh memasang Karma seperti ini:

npm install karma
Salin selepas log masuk

angular-seed menyediakan skrip mudah inskrip/test.sh untuk mencetuskan ujian Karma.


Reka bentuk kes ujian dengan Jasmine

Kebanyakan sumber sudah tersedia apabila mereka bentuk kes ujian unit untuk Angular menggunakan Jasmine - rangka kerja ujian JavaScript dengan model pembangunan dipacu tingkah laku.

Ini yang saya ingin bincangkan seterusnya.

Jika anda ingin menguji unit pengawal AngularJS, anda boleh menggunakan suntikan kebergantungan Angular suntikan kebergantungan Fungsi mengimport versi perkhidmatan yang diperlukan oleh pengawal dalam senario ujian dan juga menyemak sama ada keputusan yang dijangkakan adalah betul . Sebagai contoh, saya menentukan pengawal ini untuk menyerlahkan tab yang perlu dilayari ke:

app.controller('NavCtrl', function($scope, $location) {
  $scope.isActive = function(route) {
    return route === $location.path();
  };
})
Salin selepas log masuk

Apakah yang akan saya lakukan jika saya ingin menguji kaedah isActive? Saya akan menyemak sama ada pembolehubah $locationservice mengembalikan nilai yang dijangkakan dan kaedah mengembalikan nilai yang dijangkakan. Oleh itu, dalam penerangan ujian kami, kami akan menentukan pembolehubah tempatan untuk menyimpan versi terkawal yang diperlukan semasa ujian dan menyuntiknya ke dalam pengawal yang sepadan apabila diperlukan. Kemudian dalam kes ujian sebenar kami akan menambah penegasan untuk mengesahkan sama ada keputusan sebenar adalah betul. Seluruh proses adalah seperti berikut:

describe('NavCtrl', function() {
  var $scope, $location, $rootScope, createController;
 
  beforeEach(inject(function($injector) {
    $location = $injector.get('$location');
    $rootScope = $injector.get('$rootScope');
    $scope = $rootScope.$new();
 
    var $controller = $injector.get('$controller');
 
    createController = function() {
      return $controller('NavCtrl', {
        '$scope': $scope
      });
    };
  }));
 
  it('should have a method to check if the path is active', function() {
    var controller = createController();
    $location.path('/about');
    expect($location.path()).toBe('/about');
    expect($scope.isActive('/about')).toBe(true);
    expect($scope.isActive('/contact')).toBe(false);
  });
});
Salin selepas log masuk

Menggunakan keseluruhan struktur asas, anda boleh mereka bentuk pelbagai jenis ujian. Memandangkan senario ujian kami menggunakan persekitaran setempat untuk memanggil pengawal, anda juga boleh menambah beberapa lagi atribut dan kemudian melaksanakan kaedah untuk mengosongkan atribut ini dan kemudian mengesahkan sama ada atribut telah dikosongkan.

$httpBackendIs Cool

Jadi bagaimana jika anda memanggil $httpservice untuk meminta atau menghantar data ke pelayan? Nasib baik, Angular menyediakan

Kaedah olok-olok $httpBackend. Dengan cara ini, anda boleh menyesuaikan kandungan respons pelayan, atau memastikan bahawa keputusan respons pelayan adalah konsisten dengan jangkaan dalam ujian unit.

Butiran khusus adalah seperti berikut:

describe('MainCtrl', function() {
  var $scope, $rootScope, $httpBackend, $timeout, createController;
  beforeEach(inject(function($injector) {
    $timeout = $injector.get('$timeout');
    $httpBackend = $injector.get('$httpBackend');
    $rootScope = $injector.get('$rootScope');
    $scope = $rootScope.$new();
 
 
    var $controller = $injector.get('$controller');
 
    createController = function() {
      return $controller('MainCtrl', {
        '$scope': $scope
      });
    };
  }));
 
  afterEach(function() {
    $httpBackend.verifyNoOutstandingExpectation();
    $httpBackend.verifyNoOutstandingRequest();
  });
 
  it('should run the Test to get the link data from the go backend', function() {
    var controller = createController();
    $scope.urlToScrape = 'success.com';
 
    $httpBackend.expect('GET', '/slurp?urlToScrape=http:%2F%2Fsuccess.com')
      .respond({
        "success": true,
        "links": ["http://www.google.com", "http://angularjs.org", "http://amazon.com"]
      });
 
    // have to use $apply to trigger the $digest which will
    // take care of the HTTP request
    $scope.$apply(function() {
      $scope.runTest();
    });
 
    expect($scope.parseOriginalUrlStatus).toEqual('calling');
 
    $httpBackend.flush();
 
    expect($scope.retrievedUrls).toEqual(["http://www.google.com", "http://angularjs.org", "http://amazon.com"]);
    expect($scope.parseOriginalUrlStatus).toEqual('waiting');
    expect($scope.doneScrapingOriginalUrl).toEqual(true);
  });
});
Salin selepas log masuk

Seperti yang anda lihat, sebelumSetiap panggilan sebenarnya sangat serupa Satu-satunya perbezaan ialah kami mendapat $httpBackend daripada penyuntik dan bukannya mendapatkannya secara terus. Walaupun begitu, terdapat beberapa perbezaan yang jelas apabila membuat ujian yang berbeza. Sebagai permulaan, akan ada kaedah afterEachcall untuk memastikan bahawa $httpBackend tidak mempunyai permintaan abnormal yang jelas selepas setiap pelaksanaan kes penggunaan. Jika anda melihat pada tetapan senario ujian dan aplikasi kaedah $httpBackend, anda akan mendapati terdapat beberapa perkara yang tidak begitu intuitif.

Malah, kaedah memanggil $httpBackend adalah mudah dan jelas, tetapi ia tidak mencukupi - kita perlu memasukkan panggilan ke dalam kaedah $scope.runTest dalam ujian sebenar dalam kaedah menghantar nilai kepada $scope .$mohon. Dengan cara ini permintaan HTTP boleh diproses hanya selepas $digest dicetuskan. Seperti yang anda lihat, $httpBackend tidak akan dihuraikan sehingga kami memanggil kaedah $httpBackend.flush(), yang memastikan bahawa kami boleh mengesahkan sama ada hasil yang dikembalikan adalah betul semasa panggilan (dalam contoh di atas, pengawal $scope. sifat parseOriginalUrlStatusproperty akan dihantar kepada pemanggil, jadi kami boleh memantaunya dalam masa nyata)

Beberapa baris kod seterusnya ialah penegasan yang mengesan atribut $scopethat semasa panggilan. Sejuk kan?

Petua: Dalam sesetengah ujian unit, pengguna terbiasa menanda skop tanpa $ sebagai pembolehubah. Ini tidak wajib atau terlalu ditekankan dalam dokumentasi Sudut, tetapi saya menggunakan $scopelike untuk meningkatkan kebolehbacaan dan konsistensi.

Kesimpulan

Mungkin ini adalah salah satu perkara yang saya alami, tetapi belajar menulis ujian unit dalam Angular pastinya agak menyakitkan bagi saya pada mulanya. Saya mendapati bahawa kebanyakan pemahaman saya tentang cara untuk bermula datang daripada tampalan pelbagai catatan blog dan sumber di internet, tanpa amalan terbaik yang benar-benar konsisten atau jelas, tetapi melalui pilihan rawak yang datang secara semula jadi. Saya ingin menyediakan beberapa dokumentasi tentang apa yang saya dapat membantu orang lain yang mungkin bergelut kerana mereka hanya mahu menulis kod daripada perlu memahami semua ciri pelik dan unik penggunaan Angular dan Jasmine. Jadi saya harap artikel ini dapat membantu anda.

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

2022年最新5款的angularjs教程从入门到精通 2022年最新5款的angularjs教程从入门到精通 Jun 15, 2017 pm 05:50 PM

Javascript 是一个非常有个性的语言. 无论是从代码的组织, 还是代码的编程范式, 还是面向对象理论都独具一格. 而很早就在争论的Javascript 是不是面向对象语言这个问题, 显然已有答案. 但是, 即使 Javascript 叱咤风云二十年, 如果想要看懂 jQuery, Angularjs, 甚至是 React 等流行框架, 观看《黑马云课堂JavaScript 高级框架设计视频教程》就对了。

Gunakan PHP dan AngularJS untuk membina tapak web responsif untuk menyediakan pengalaman pengguna yang berkualiti tinggi Gunakan PHP dan AngularJS untuk membina tapak web responsif untuk menyediakan pengalaman pengguna yang berkualiti tinggi Jun 27, 2023 pm 07:37 PM

Dalam era maklumat hari ini, laman web telah menjadi alat penting untuk orang ramai mendapatkan maklumat dan berkomunikasi. Tapak web responsif boleh menyesuaikan diri dengan pelbagai peranti dan memberikan pengguna pengalaman berkualiti tinggi, yang telah menjadi tumpuan dalam pembangunan tapak web moden. Artikel ini akan memperkenalkan cara menggunakan PHP dan AngularJS untuk membina tapak web responsif untuk memberikan pengalaman pengguna yang berkualiti tinggi. Pengenalan kepada PHP PHP ialah bahasa pengaturcaraan sisi pelayan sumber terbuka yang sesuai untuk pembangunan web. PHP mempunyai banyak kelebihan, seperti mudah dipelajari, merentas platform, perpustakaan alat yang kaya, kecekapan pembangunan

Bina aplikasi web menggunakan PHP dan AngularJS Bina aplikasi web menggunakan PHP dan AngularJS May 27, 2023 pm 08:10 PM

Dengan pembangunan berterusan Internet, aplikasi Web telah menjadi bahagian penting dalam pembinaan maklumat perusahaan dan cara kerja pemodenan yang diperlukan. Untuk menjadikan aplikasi web mudah dibangunkan, diselenggara dan dikembangkan, pembangun perlu memilih rangka kerja teknikal dan bahasa pengaturcaraan yang sesuai dengan keperluan pembangunan mereka. PHP dan AngularJS ialah dua teknologi pembangunan web yang sangat popular. Kedua-duanya adalah penyelesaian bahagian pelayan dan bahagian pelanggan. Penggunaan gabungan mereka boleh meningkatkan kecekapan pembangunan dan pengalaman pengguna aplikasi web. Kelebihan PHPPHP

Bina aplikasi web satu halaman menggunakan Flask dan AngularJS Bina aplikasi web satu halaman menggunakan Flask dan AngularJS Jun 17, 2023 am 08:49 AM

Dengan perkembangan pesat teknologi Web, Aplikasi Web Halaman Tunggal (SinglePage Application, SPA) telah menjadi model aplikasi Web yang semakin popular. Berbanding dengan aplikasi web berbilang halaman tradisional, kelebihan terbesar SPA ialah pengalaman pengguna lebih lancar, dan tekanan pengkomputeran pada pelayan juga sangat berkurangan. Dalam artikel ini, kami akan memperkenalkan cara membina SPA mudah menggunakan Flask dan AngularJS. Flask ialah Py ringan

Gunakan PHP dan AngularJS untuk membangunkan platform pengurusan fail dalam talian untuk memudahkan pengurusan fail Gunakan PHP dan AngularJS untuk membangunkan platform pengurusan fail dalam talian untuk memudahkan pengurusan fail Jun 27, 2023 pm 01:34 PM

Dengan populariti Internet, semakin ramai orang menggunakan rangkaian untuk memindahkan dan berkongsi fail. Namun, atas pelbagai sebab, pengurusan fail menggunakan kaedah tradisional seperti FTP tidak dapat memenuhi keperluan pengguna moden. Oleh itu, mewujudkan platform pengurusan fail dalam talian yang mudah digunakan, cekap dan selamat telah menjadi satu trend. Platform pengurusan fail dalam talian yang diperkenalkan dalam artikel ini adalah berdasarkan PHP dan AngularJS Ia boleh melakukan muat naik, memuat turun, mengedit, memadam dan operasi lain dengan mudah, dan menyediakan satu siri fungsi yang berkuasa, seperti perkongsian fail, carian,

Bagaimana untuk menggunakan AngularJS dalam pengaturcaraan PHP? Bagaimana untuk menggunakan AngularJS dalam pengaturcaraan PHP? Jun 12, 2023 am 09:40 AM

Dengan populariti aplikasi web, rangka kerja bahagian hadapan AngularJS telah menjadi semakin popular. AngularJS ialah rangka kerja JavaScript yang dibangunkan oleh Google yang membantu anda membina aplikasi web dengan keupayaan aplikasi web dinamik. Sebaliknya, untuk pengaturcaraan bahagian belakang, PHP ialah bahasa pengaturcaraan yang sangat popular. Jika anda menggunakan PHP untuk pengaturcaraan sisi pelayan, maka menggunakan PHP dengan AngularJS akan membawa lebih banyak kesan dinamik ke tapak web anda.

Cara menggunakan PHP dan AngularJS untuk pembangunan bahagian hadapan Cara menggunakan PHP dan AngularJS untuk pembangunan bahagian hadapan May 11, 2023 pm 05:18 PM

Dengan populariti dan perkembangan Internet, pembangunan bahagian hadapan menjadi semakin penting. Sebagai pembangun bahagian hadapan, kita perlu memahami dan menguasai pelbagai alatan dan teknologi pembangunan. Antaranya, PHP dan AngularJS adalah dua alat yang sangat berguna dan popular. Dalam artikel ini, kami akan menerangkan cara menggunakan kedua-dua alat ini untuk pembangunan bahagian hadapan. 1. Pengenalan kepada PHP PHP ialah bahasa skrip bahagian pelayan sumber terbuka yang popular Ia sesuai untuk pembangunan web dan boleh dijalankan pada pelayan web dan pelbagai sistem pengendalian. Kelebihan PHP adalah kesederhanaan, kelajuan dan kemudahan

AngularJS基础入门介绍 AngularJS基础入门介绍 Apr 21, 2018 am 10:37 AM

这篇文章介绍的内容是关于AngularJS基础入门介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下。

See all articles