Jasmine と Karma_node.js を使用して AngularJS ページ プログラムをテストする
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>

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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