皆さん、こんにちは!Yeoman チームの Eddie です。Karma Generator の最近の変更点についてご紹介します。変更点は主に設定とテストに焦点を当てています。
なぜリライトが必要だったのか?
要約: リライトは必須ではありませんでした。Angular ジェネレータ が動作し続けるためにいくつかの変更が必要でした。
Karma チーム は最近、Karma が プラグインをインストールする方法 について変更を加えました。以前は多くのデフォルトプラグインがインストールされていましたが、現在はどのプラグインもインストールされません。多くの人がこれは非常に悪い変更だと考えていましたが、実際はブロートウェアが含まれなくなるため、優れた変更です。ユーザーが必要とするプラグインのみがインストールされるようになりました。
Angular ジェネレータは、テストコンポーネントの作成に Karma ジェネレータを使用していました。Karma の変更により、テストがすぐに動作しなくなりました。テストは、ブラウザの起動など、いくつかの操作を実行できないことを訴えていました。簡単な修正としては、Angular 生成プロセスの一部として不足しているプラグインをインストールすることでした。これは、プロジェクトをより脆く、構成可能性が低くするため、理想的な修正ではありませんでした。より良い解決策は、Karma ジェネレータをよりカスタマイズ可能にすることでした。
また、これは ジェネレータシステム の新しい 0.17.0 の変更をテストするための良いプロジェクトでもありました。
リライトの目標は何だったのか?
- 新しい 0.17.0 Yeoman Generator を使用する
- 全体的なテストの改善
- Karma 設定のほぼすべてをカスタマイズできるサポートを提供する
- ユーザーが要求した Karma プラグイン(および明示的に指定されていない必要なプラグイン)をインストールする
- Gruntfile.js 設定ブロックとタスクを作成する
0.17.0 Yeoman Generator
Simon は最近、Yeoman ジェネレータシステムに多くの変更を加え、現実世界のテストが必要でした。すべての新機能がテストされたわけではありませんが、コア機能は公開されました。これには、より簡単なテスト方法、よりシンプルなジェネレータ構文、Gruntfile 統合* が含まれます。
テスト
新しいジェネレータシステムにより、リライトのテストは、恐ろしい作業ではなく、楽しいものになりました。必要なコードの量が削減され、可読性も向上しました。これは通常は起こらないことなので、歓迎すべき変更でした。
ジェネレータテストは、オプションとファイル作成を同時にテストするのではなく、個別にテストするようになりました。これにより、個々の部分が個別にテストされるため、テストの精度が向上します。すべてのソースコードの変更は検証可能であり、この変更やその変更が全体を壊すかどうかを心配する必要がなくなります。
カスタマイズ
現在、カスタマイズできないジェネレータの部分はほとんどありません。利用可能なオプションの簡単なリストを以下に示します。
- テストを実行するブラウザを指定する (デフォルトは PhantomJS)
- 使用するフレームワークを指定する (デフォルトは Jasmine)
- テスト対象のファイルを指定する
- 使用するプラグインを指定する。フレームワークやブラウザなどの不足しているプラグインは、ジェネレータによって追加されます。
- 設定ファイルの書き込み先 (名前とパスを含む) を指定する
これは完全なリストではありません。完全なリストについては、プロジェクトの README を参照してください。
Gruntfile
ジェネレータは、適切な Gruntfile 設定ブロックとタスクを追加しようとします。これは、手動で行い、正しく動作することを期待するよりも歓迎すべき変更です。CoffeeScript で記述された Gruntfile については、CoffeeScript の注記 を参照してください。
CoffeeScript Gruntfile サポート
CoffeeScript には、プログラムで読み取って設定を挿入できるパーサーがありません(もしあれば、プルリクエストは大歓迎です)。そのため、ジェネレータシステムは設定を書き込むことができません。:(
ダークサイド
しかし、すべてが順風満帆というわけではありません。このリライトにはいくつかの欠点もあります。最初の欠点は、同時に利点でもあるのですが、これはもはや Angular 中心ではなくなったことです。angular-scenario
と angular-mock
は、デフォルトではインストールされなくなりました。これらを使用するには、bower-components
オプションにコンポーネントとして追加してください。もう1つの変更点は、Jasmine と PhantomJS のために必要な 2 つのプラグイン以外、デフォルトで指定されるプラグインがなくなったことです。
対 karma init
karma init
があると、このジェネレータは意味がないのでしょうか?
いいえ。karma init
は基本的な設定ファイルを構築しますが、これほど多くのカスタマイズオプションを提供しません。また、Gruntfile を更新することもありません。このジェネレータはそれを提供し、他のジェネレータと組み合わせることができ、依存関係をインストールします。
まとめ
このリライトが、他の Yeoman ジェネレータの将来の兆しとなることを願っています。少なくとも、テストは改善されているため、多くの人々の笑顔につながるでしょう。
いつものように、バグレポートは Issue ページ でご報告ください。プルリクエストは常に歓迎しますが、変更を提案する Issue から始めるようにしてください。