Maison interface Web js tutoriel Testez le programme de page AngularJS en utilisant Jasmine et Karma_node.js

Testez le programme de page AngularJS en utilisant Jasmine et Karma_node.js

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

AngularJS est la meilleure chose qui soit arrivée à JavaScript depuis jQuery. C’est ainsi que le développement JavaScript a toujours été prévu. L’un des principaux avantages d’Angular est son injection de dépendances (Dependency Injection), très pratique pour les tests unitaires de code. Mais ce qui est un peu bizarre, c'est que je ne trouve pas de tutoriel sur la façon de faire des tests unitaires.

Bien sûr, il existe de nombreuses bonnes recommandations : utiliser le framework de test Jasmine et l'exécuteur de test Karma (Test Runner) ; mais il n'existe pas de tutoriel complet sur la façon de tester à partir de zéro ; J'ai donc écrit cet article. J’ai trouvé de nombreuses ressources en ligne pour comprendre comment procéder, et vous n’avez pas besoin de faire quoi que ce soit de tout cela maintenant (si vous lisez cet article en premier lieu).

Veuillez me signaler toutes les erreurs que vous voyez jusqu'à ce que je puisse dire qu'il s'agit de la meilleure pratique pour tester les applications angulaires basées sur Karma et Jasmine.

Présentation

Cet article vous guidera pour installer tous les outils dont vous avez besoin pour utiliser Karma et Jasmine pour les tests automatisés. Peu m'importe si vous utilisez réellement TDD (Test Driven Development) ou TAD (Test Assisted Development), pour les besoins de cet article, je suppose que vous avez déjà un fichier à tester.

Installer Karma

Si Node.js n'est pas installé, veuillez le télécharger et l'installer vous-même. Après l'installation, ouvrez un terminal ou une ligne de commande et entrez la commande :

npm install -g karma
Copier après la connexion

Structure des fichiers

La structure des fichiers n'est pas étroitement liée à notre sujet, mais dans les tests suivants, la structure des fichiers que j'ai utilisée est la suivante :

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
Copier après la connexion

*Je ne préconise pas cette structure de document, je la montre juste à titre d'exemple de test.

Configurer Karma

Basculez vers le répertoire où vous souhaitez placer le fichier de configuration, puis saisissez la commande suivante dans le terminal pour créer le fichier de configuration :

karma init karma.config.js
Copier après la connexion

Quelques questions vous seront posées, notamment quel framework de test vous souhaitez utiliser, si vous avez besoin de fichiers de surveillance automatique, quels tests et fichiers testés sont inclus, etc. Dans notre tutoriel, nous conservons « Jasmine » comme framework par défaut, activons la détection automatique des fichiers et incluons les fichiers suivants :

../*.js
../**.*.js
angular-mocks.js
**/*.tests.js
Copier après la connexion

Ce sont des chemins relatifs, comprenant 1) tous les fichiers .js du répertoire parent, 2) tous les fichiers .js dans tous les sous-répertoires du répertoire parent, 3) angulaire-mock.js dans le répertoire actuel, 4) Et tous Fichiers .tests.js dans le répertoire actuel (y compris les sous-répertoires) (j'aime ainsi distinguer les fichiers de test des autres fichiers).

Quels que soient les fichiers que vous choisissez, assurez-vous d'inclure angulaire.js, angulaire-mock.js et les autres fichiers que vous devez utiliser.

Démarrer le Karma

Vous pouvez maintenant démarrer Karma, entrez toujours dans le terminal :

karma start karma.config.js
Copier après la connexion

Cette commande lancera les navigateurs que vous avez répertoriés dans le fichier de configuration sur votre ordinateur. Ces navigateurs se connecteront à l'instance Karma via des sockets. Vous verrez une liste des navigateurs actifs et serez informé s'ils exécutent des tests. J'aurais aimé que Karma vous donne un résumé des résultats finaux des tests sur chaque navigateur (par exemple 15 sur 16 réussis, 1 échoué), mais malheureusement vous ne pouvez voir ces informations que via la fenêtre du terminal.

L'une des fonctionnalités les plus remarquables de Karma est que vous pouvez vous connecter et tester votre code en utilisant n'importe quel appareil du réseau. Essayez de pointer votre navigateur mobile vers le service Karma. Vous pouvez trouver l'URL de test dans n'importe quel navigateur exécuté sur votre ordinateur. Cela devrait ressembler à : http://localhost:9876/?id=5359192. Vous pouvez pointer le navigateur de votre téléphone, machine virtuelle ou tout autre appareil vers [votre adresse IP sur le réseau] :9876/?id=5359192. Étant donné que Karma exécute une instance Node.js, votre machine de test ressemble à un site Web. serveur, les tests seront envoyés à tout navigateur pointé vers lui.

Tests de base

Nous supposons que vous avez déjà un fichier à tester. Le fichier home.js que nous souhaitons utiliser est le suivant :

home.js

'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();
});
Copier après la connexion

Nous pouvons créer nos cas de test dans le fichier home.test.js. Commençons par le test simple : $scope.text devrait être égal à « Hello World ! ». Afin de terminer ce test, nous devons simuler notre module Application et la variable $scope. Nous ferons cela dans la méthode beforeEach de Jasmine afin d'avoir un tout nouveau contrôleur (propre) et un objet scope au début de chaque scénario de test.

home.tests.js

'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});
 });
 
// 测试从这里开始
});
Copier après la connexion

Vous pouvez voir dans le code que nous injectons notre propre scope afin de pouvoir valider ses informations en dehors de celui-ci. N’oubliez pas non plus de vous moquer du module lui-même (ligne 7) ! Nous sommes maintenant prêts pour les tests :

home.tests.js

// 测试从这里开始
it('should have variable text = "Hello World!"', function(){
 expect(scope.text).toBe('Hello World!);
});
Copier après la connexion

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

发送$resource请求

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

$httpBackend = _$httpBackend_; 
$httpBackend.when('GET', 'Users/users.json').respond([{id: 1, name: 'Bob'}, {id:2, name: 'Jane'}]);
Copier après la connexion

我们的测试: home.tests.js

it('should fetch list of users', function(){
   $httpBackend.flush();
   expect(scope.users.length).toBe(2);
   expect(scope.users[0].name).toBe('Bob');
  });
Copier après la connexion

都放到一起

home.tests.js

'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');
 });
});
Copier après la connexion

技巧

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

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

<!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>
Copier après la connexion

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que pensez-vous de furmark ? - Comment furmark est-il considéré comme qualifié ? Que pensez-vous de furmark ? - Comment furmark est-il considéré comme qualifié ? Mar 19, 2024 am 09:25 AM

Que pensez-vous de furmark ? 1. Définissez le « Mode d'exécution » et le « Mode d'affichage » dans l'interface principale, ajustez également le « Mode de test » et cliquez sur le bouton « Démarrer ». 2. Après avoir attendu un moment, vous verrez les résultats du test, y compris divers paramètres de la carte graphique. Comment Furmark est-il qualifié ? 1. Utilisez une machine à pâtisserie Furmark et vérifiez les résultats pendant environ une demi-heure. Elle oscille essentiellement autour de 85 degrés, avec une valeur maximale de 87 degrés et une température ambiante de 19 degrés. Grand châssis, 5 ports de ventilateur de châssis, deux à l'avant, deux en haut et un à l'arrière, mais un seul ventilateur est installé. Tous les accessoires ne sont pas overclockés. 2. Dans des circonstances normales, la température normale de la carte graphique doit être comprise entre « 30 et 85 ℃ ». 3. Même en été, lorsque la température ambiante est trop élevée, la température normale est de « 50 à 85 ℃.

Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Apr 03, 2024 am 11:55 AM

La technologie de détection et de reconnaissance des visages est déjà une technologie relativement mature et largement utilisée. Actuellement, le langage d'application Internet le plus utilisé est JS. La mise en œuvre de la détection et de la reconnaissance faciale sur le front-end Web présente des avantages et des inconvénients par rapport à la reconnaissance faciale back-end. Les avantages incluent la réduction de l'interaction réseau et de la reconnaissance en temps réel, ce qui réduit considérablement le temps d'attente des utilisateurs et améliore l'expérience utilisateur. Les inconvénients sont les suivants : il est limité par la taille du modèle et la précision est également limitée ; Comment utiliser js pour implémenter la détection de visage sur le web ? Afin de mettre en œuvre la reconnaissance faciale sur le Web, vous devez être familier avec les langages et technologies de programmation associés, tels que JavaScript, HTML, CSS, WebRTC, etc. Dans le même temps, vous devez également maîtriser les technologies pertinentes de vision par ordinateur et d’intelligence artificielle. Il convient de noter qu'en raison de la conception du côté Web

Rejoignez une nouvelle aventure Xianxia ! Le pré-téléchargement de 'Zhu Xian 2' 'Wuwei Test' est maintenant disponible Rejoignez une nouvelle aventure Xianxia ! Le pré-téléchargement de 'Zhu Xian 2' 'Wuwei Test' est maintenant disponible Apr 22, 2024 pm 12:50 PM

Le « Test d'inaction » du nouveau MMORPG féerique fantastique « Zhu Xian 2 » sera lancé le 23 avril. Quel genre de nouvelle histoire d'aventure féerique se produira sur le continent Zhu Xian des milliers d'années après l'œuvre originale ? Le monde immortel des six royaumes, une académie à plein temps pour cultiver des immortels, une vie libre pour cultiver des immortels et toutes sortes de divertissements dans le monde immortel attendent que les amis immortels l'explorent en personne ! Le pré-téléchargement "Wuwei Test" est maintenant ouvert. Les amis fées peuvent accéder au site officiel pour télécharger. Vous ne pouvez pas vous connecter au serveur de jeu avant le lancement du serveur. Le code d'activation peut être utilisé après le pré-téléchargement et l'installation. est terminé. "Zhu Xian 2" "Inaction Test" horaires d'ouverture : 23 avril 10h00 - 6 mai 23h59 Le nouveau chapitre d'aventure de conte de fées de la suite orthodoxe de Zhu Xian "Zhu Xian 2" est basé sur le roman "Zhu Xian" comme un modèle basé sur la vision du monde de l'œuvre originale, l'arrière-plan du jeu est défini.

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Le nouveau roi des FPS domestiques ! Le champ de bataille « Opération Delta » dépasse les attentes Le nouveau roi des FPS domestiques ! Le champ de bataille « Opération Delta » dépasse les attentes Mar 07, 2024 am 09:37 AM

"Opération Delta" lancera aujourd'hui (7 mars) un test PC à grande échelle appelé "Codename: ZERO". Le week-end dernier, ce jeu a organisé un événement d'expérience flash mob hors ligne à Shanghai, et 17173 a également eu la chance d'être invité à participer. Ce test remonte à un peu plus de quatre mois depuis le dernier, ce qui nous rend curieux, quels nouveaux points forts et surprises l'Opération Delta apportera-t-elle en si peu de temps ? Il y a plus de quatre mois, j'ai expérimenté « l'Opération Delta » lors d'une séance de dégustation hors ligne et la première version bêta. A cette époque, le jeu n'ouvrait que le mode "Action Dangereuse". Pourtant, l’opération Delta était déjà impressionnante pour l’époque. Dans un contexte où les grands constructeurs se ruent sur le marché du jeu mobile, un tel FPS comparable aux standards internationaux

Comment désactiver les cas de test dans Maven ? Comment désactiver les cas de test dans Maven ? Feb 26, 2024 am 09:57 AM

Maven est un outil de gestion de projet open source couramment utilisé pour des tâches telles que la construction, la gestion des dépendances et la publication de documents de projets Java. Lorsque nous utilisons Maven pour la construction d'un projet, nous souhaitons parfois ignorer la phase de test lors de l'exécution de commandes telles que mvnpackage, ce qui améliorera la vitesse de construction dans certains cas, en particulier lorsqu'un prototype ou un environnement de test doit être construit rapidement. Cet article détaillera comment ignorer la phase de test dans Maven, avec des exemples de code spécifiques. Pourquoi devriez-vous ignorer les tests Lors du développement d'un projet, il est souvent

La relation entre js et vue La relation entre js et vue Mar 11, 2024 pm 05:21 PM

La relation entre js et vue : 1. JS comme pierre angulaire du développement Web ; 2. L'essor de Vue.js en tant que framework front-end ; 3. La relation complémentaire entre JS et Vue ; Vue.

PHP Jenkins 101 : la seule façon de démarrer avec CI/CD PHP Jenkins 101 : la seule façon de démarrer avec CI/CD Mar 09, 2024 am 10:28 AM

Introduction L'intégration continue (CI) et le déploiement continu (CD) sont des pratiques clés du développement de logiciels modernes qui aident les équipes à fournir des logiciels de haute qualité plus rapidement et de manière plus fiable. Jenkins est un outil CI/CD open source populaire qui automatise le processus de création, de test et de déploiement. Cet article explique comment configurer un pipeline CI/CD avec Jenkins à l'aide de PHP. Configurer Jenkins Installer Jenkins : Téléchargez et installez Jenkins à partir du site Web officiel de Jenkins. Créer un projet : créez un nouveau projet à partir du tableau de bord Jenkins et nommez-le en fonction de votre projet php. Configurer le contrôle de source : configurez le référentiel git de votre projet PHP en tant que Jenkin

See all articles