ホームページ ウェブフロントエンド jsチュートリアル Jasmine と Karma_node.js を使用して AngularJS ページ プログラムをテストする

Jasmine と Karma_node.js を使用して AngularJS ページ プログラムをテストする

May 16, 2016 pm 03:12 PM
angularjs javascript js テスト

AngularJS は、jQuery 以来 JavaScript に起こる最良のものです。これは、JavaScript 開発が常に意図されてきた方法です。 Angular の主な利点の 1 つは、コードの単体テストに非常に便利な依存関係の挿入 (Dependency Injection) です。しかし、少し奇妙なのは、単体テストの実行方法に関するチュートリアルが見つからないことです。

もちろん、Jasmine テスト フレームワークと Karma テスト実行プログラム (テスト ランナー) の使用など、多くの優れた推奨事項がありますが、ゼロからテストする方法についての完全なチュートリアルはありません。そこでこの記事を書きました。その方法を理解するためにオンラインで多くのリソースを見つけましたが、(最初にこの記事を読んでいるのであれば) 今それを行う必要はありません。

これが Karma と Jasmine に基づいた Angular アプリのテストのベスト プラクティスであると言えるまで、表示されたエラーを教えてください。

はじめに

この記事では、自動テストに Karma と Jasmine を使用するために必要なすべてのツールをインストールする方法を説明します。実際に TDD (テスト駆動開発) を使用するか TAD (テスト支援開発) を使用するかは気にしません。この記事では、テストするファイルがすでにあることを前提としています。

Karma をインストールします

Node.js がインストールされていない場合は、自分でダウンロードしてインストールしてください。インストール後、ターミナルまたはコマンドラインを開いて次のコマンドを入力します:

npm install -g karma
ログイン後にコピー

ファイル構造

ファイル構造は今回のトピックとは密接に関係ありませんが、次のテストで使用したファイル構造は次のとおりです:

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
ログイン後にコピー

*私はこの文書構造を推奨しているわけではなく、単なるテスト例として示しています。

カルマを構成する

構成ファイルを配置するディレクトリに切り替えて、ターミナルに次のコマンドを入力して構成ファイルを作成します。

karma init karma.config.js
ログイン後にコピー

どのテスト フレームワークを使用するか、自動監視ファイルが必要かどうか、どのようなテストとテスト対象ファイルが含まれるかなど、いくつかの質問が表示されます。このチュートリアルでは、「Jasmine」をデフォルトのフレームワークとして保持し、自動ファイル検出を有効にし、次のファイルを含めます:

../*.js
../**.*.js
angular-mocks.js
**/*.tests.js
ログイン後にコピー

これらは相対パスです。1) 親ディレクトリ内のすべての .js ファイル、2) 親ディレクトリの下のすべてのサブディレクトリ内のすべての .js ファイル、3) 現在のディレクトリの angular-mock.js、4) そしてすべて現在のディレクトリ (サブディレクトリを含む) にある .tests.js ファイル (私はこの方法でテスト ファイルを他のファイルと区別するのが好きです)。

どのファイルを選択する場合でも、angular.js、angular-mock.js、および使用する必要があるその他のファイルを必ず含めてください。

カルマを開始

これで、ターミナルに次のように入力して、Karma を開始できます:

karma start karma.config.js
ログイン後にコピー

このコマンドは、コンピューター上の構成ファイルにリストされているブラウザーを起動します。これらのブラウザはソケット経由で Karma インスタンスに接続し、アクティブなブラウザのリストが表示され、テストを実行しているかどうかが通知されます。 Karma が各ブラウザでの最終テスト結果の概要 (例: 16 件中 15 件が合格、1 件が不合格) を提供してくれればよかったのですが、残念ながらこの情報はターミナル ウィンドウからしか見ることができません。

Karma の優れた機能の 1 つは、ネットワーク上の任意のデバイスを使用してコードに接続してテストできることです。モバイル ブラウザで Karma サービスを指定してみてください。コンピュータで実行されている任意のブラウザでテスト URL を見つけることができます。 http://localhost:9876/?id=5359192 のようになります。電話、仮想マシン、またはその他のデバイスのブラウザで [ネットワーク上の IP アドレス]:9876/?id=5359192 を指定できます。Karma は Node.js インスタンスを実行しているため、テスト マシンは Web と同じです。サーバーに接続すると、テストはそのサーバーを指すブラウザに送信されます。

基本テスト

テストするファイルがすでにあることを前提としています。使用する home.js ファイルは次のとおりです:

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();
});
ログイン後にコピー

home.test.js ファイルでテスト ケースを作成できます。簡単なテストから始めましょう: $scope.text は「Hello World!」と等しい必要があります。 このテストを完了するには、アプリケーション モジュールと $scope 変数をモックする必要があります。これを Jasmine の beforeEach メソッドで実行して、各テスト ケースの開始時に新しい (クリーンな) コントローラーとスコープ オブジェクトを用意します。

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});
 });
 
// 测试从这里开始
});
ログイン後にコピー

コードから、独自のスコープを挿入して、スコープの外側でその情報を検証できることがわかります。また、モジュール自体をモックすることを忘れないでください (7 行目)。これでテストの準備が整いました:

home.tests.js

// 测试从这里开始
it('should have variable text = "Hello World!"', function(){
 expect(scope.text).toBe('Hello World!);
});
ログイン後にコピー

如果你运行这个测试,它可以在任何指向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'}]);
ログイン後にコピー

我们的测试: 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');
  });
ログイン後にコピー

都放到一起

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');
 });
});
ログイン後にコピー

技巧

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>
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

furmark についてどう思いますか? - furmark はどのように資格があるとみなされますか? furmark についてどう思いますか? - furmark はどのように資格があるとみなされますか? Mar 19, 2024 am 09:25 AM

furmark についてどう思いますか? 1. メインインターフェイスで「実行モード」と「表示モード」を設定し、「テストモード」も調整して「開始」ボタンをクリックします。 2. しばらく待つと、グラフィックス カードのさまざまなパラメータを含むテスト結果が表示されます。ファーマークはどのように資格を取得しますか? 1. ファーマークベーキングマシンを使用し、約 30 分間結果を確認します。室温 19 度、ピーク値は 87 度で、基本的に 85 度前後で推移します。大型シャーシ、シャーシ ファン ポートが 5 つあり、前面に 2 つ、上部に 2 つ、背面に 1 つありますが、ファンは 1 つだけ取り付けられています。すべてのアクセサリはオーバークロックされていません。 2. 通常の状況では、グラフィックス カードの通常の温度は「30 ~ 85℃」である必要があります。 3. 周囲温度が高すぎる夏でも、通常の温度は「50〜85℃」です

推奨: 優れた JS オープンソースの顔検出および認識プロジェクト 推奨: 優れた JS オープンソースの顔検出および認識プロジェクト Apr 03, 2024 am 11:55 AM

顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

新しい仙霞の冒険に参加しましょう! 「朱仙2」「武威検定」の事前ダウンロードが開始されました 新しい仙霞の冒険に参加しましょう! 「朱仙2」「武威検定」の事前ダウンロードが開始されました Apr 22, 2024 pm 12:50 PM

新作ファンタジー妖精MMORPG『朱仙2』の「武威試験」が4月23日より開始されます。原作から数千年後の朱仙大陸で、どのような新たな妖精冒険物語が繰り広げられるのでしょうか?六界の不滅の世界、フルタイムの不滅のアカデミー、自由な不滅の生活、そして不滅の世界のあらゆる種類の楽しみが、不滅の友人たちが直接探索するのを待っています! 「Wuwei Test」の事前ダウンロードが開始されました。Fairy friends は公式 Web サイトにアクセスしてダウンロードできます。サーバーが起動する前に、アクティベーション コードは事前ダウンロードとインストール後に使用できます。完成されました。 『朱仙2』「不作為試験」開催時間:4月23日10:00~5月6日23:59 小説『朱仙』を原作とした朱仙正統続編『朱仙2』の新たな童話冒険篇原作の世界観をベースにゲーム背景を設定。

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

国産FPSの新たな王者! 「オペレーション・デルタ」の戦場は予想を超える 国産FPSの新たな王者! 「オペレーション・デルタ」の戦場は予想を超える Mar 07, 2024 am 09:37 AM

「オペレーション デルタ」は本日(3月7日)より大規模PCテスト「コードネーム:ZERO」を開始する。先週末、上海で本作のオフラインフラッシュモブ体験イベントが開催され、幸運にも17173さんも参加することができました。前回のテストからわずか 4 か月以上しか離れていないため、この短期間で「オペレーション デルタ」がどのような新たなハイライトやサプライズをもたらすのか、興味が湧きます。 4か月以上前、私はオフライン試食会と最初のベータ版で「オペレーション デルタ」を体験しました。当時、ゲームは「危険なアクション」モードのみを開きました。しかし、デルタ作戦は当時としてはすでに印象的なものでした。大手メーカーがモバイルゲーム市場に群がる中、国際基準に匹敵するFPS

jsとvueの関係 jsとvueの関係 Mar 11, 2024 pm 05:21 PM

js と vue の関係: 1. Web 開発の基礎としての JS、2. フロントエンド フレームワークとしての Vue.js の台頭、3. JS と Vue の補完関係、4. JS と Vue の実用化ビュー。

Maven でテスト ケースを無効にするにはどうすればよいですか? Maven でテスト ケースを無効にするにはどうすればよいですか? Feb 26, 2024 am 09:57 AM

Maven は、Java プロジェクトの構築、依存関係の管理、ドキュメントのリリースなどのタスクに一般的に使用されるオープンソースのプロジェクト管理ツールです。プロジェクトのビルドに Maven を使用する場合、mvnpackage などのコマンドを実行するときにテスト フェーズを無視したい場合があります。これにより、場合によってはビルド速度が向上します (特にプロトタイプまたはテスト環境を迅速に構築する必要がある場合)。この記事では、Maven でテスト フェーズを無視する方法を、具体的なコード例とともに詳しく説明します。テストを無視すべき理由 プロジェクト開発中は、次のことがよくあります。

PHP Jenkins 101: CI/CD を始める唯一の方法 PHP Jenkins 101: CI/CD を始める唯一の方法 Mar 09, 2024 am 10:28 AM

はじめに 継続的インテグレーション (CI) と継続的デプロイメント (CD) は、チームが高品質のソフトウェアをより迅速かつ確実に提供するのに役立つ、最新のソフトウェア開発における重要な手法です。 Jenkins は、ビルド、テスト、デプロイメントのプロセスを自動化する人気のオープンソース CI/CD ツールです。この記事では、PHP を使用して Jenkins で CI/CD パイプラインを設定する方法について説明します。 Jenkins のセットアップ Jenkins のインストール: Jenkins の公式 Web サイトから Jenkins をダウンロードしてインストールします。プロジェクトの作成: Jenkins ダッシュボードから新しいプロジェクトを作成し、php プロジェクトに一致する名前を付けます。ソース管理の構成: PHP プロジェクトの git リポジトリを Jenkin として構成します

See all articles