11

JavaScript コードの量が増えている大規模な Web アプリケーションに取り組んでいるときに、コードの品質を向上させる方法についてブレインストーミング セッションを行いました。

最初のアイデアの 1 つは、単体テストを導入することでした。これは長期的な目標です。ただし、回帰の最も一般的な原因である DOM の変更とブラウザー固有の問題は修正されません。

単体テストは、モック化された DOM のない環境で実行され、ページ上にはありません。

私が探しているのは、次のようにコードにプラグインできるアサーション フレームワークです。

var $div = $("div.fooBarClass");
assertNotEmpty($div);
$div.fooBarAction();

これを実行できるアサーション フレームワークを見つけましたが、それらはすべて、コンソールまたは DOM にログインするか、ばかげたポップアップを開くかのいずれかです。これらのどれも (数千の) 自動化されたテストと連携して動作しません。 私が探しているのは、AJAX を介して失敗したアサーションをログに記録するランタイム アサーション フレームワークです! 理想的には、次のようにする必要があります。

  • 一般的なアサーションが組み込まれています。
  • JQuery モジュール、クロージャと統合します。
  • (Ajax 経由で) アサーション、ファイル名、ページ、行番号、失敗の原因、環境の事前構成変数 (ブラウザー、リリース バージョンなど) をログに記録します。
  • 失敗した場合のコールバックをサポートします。(これを実行できるアサーション フレームワークがあれば、Ajax 部分を実行するコールバックを喜んで作成します。)
  • すべてのブラウザでうまく動作します。
  • 生産リリースから除外するのは簡単です。
  • 維持されたコードベース。
4

3 に答える 3

2

YUI Test Libraryを使用しています。それはかなりうまくいくようです。

さまざまなタイプのさまざまなアサーション メソッドがあります

等価性、同一性、真、偽、オブジェクト タイプ、さらには配列項目の比較に対してもアサーションが存在します。

モック オブジェクトで DOM オブジェクトやその他の機能をテストできるようにする 私たちのコードは、多くの AJAX 呼び出しを行うか、テストする必要のないメソッド/オブジェクトを必要とします (他の場所でテストされているため)。モック オブジェクトを使用して、テストに何を期待するかを伝えることができます。例えば:

var mockXhr = Y.Mock();

//I expect the open() method to be called with the given arguments
Y.Mock.expect(mockXhr, {
    method: "open",
    args: ["get", "/log.php?msg=hi", true]                            
});

すべてのブラウザで動作

IE、Chrome、および Firefox でテストを実行しましたが、テスト ランナー自体がどのように見えるかのいくつかの違いは別として、動作します!

本番リリースから除外するのは簡単

すべてのテスト コードは、すべての製品コードにアクセスする別のフォルダーにあります。テストを本番環境から除外するのは、フォルダーを除外するのと同じくらい簡単です。

維持されたコードベース

YUI 3 は Yahoo ホームページで使用されており、かなりよく維持されているようです。

于 2011-03-02T02:29:31.123 に答える
0

私が探している同様の解決策はないようです。

引数がfalseと評価されたときにajax呼び出しを行うために、console.assertをオーバーライドして独自のものを作成します。

更新:ここに来ます、まだ開発中です、https://github.com/gaboom/qassert

于 2011-03-11T13:17:46.430 に答える
0

あなたが求めていたものではないことは承知していますが、Web アプリケーションの自動テストにはSeleniumを強くお勧めします。

  • 一般的なアサーションが組み込まれています。
  • コードが実行されるブラウザーを駆動するため、任意の JS フレームワークをテストできます。
  • 堅牢なログ機能があります。
  • ブラウザのサポートは OS によって異なりますが、主要なブラウザはすべてサポートされています。
  • テストはアプリケーションの外部にあるため、本番リリースから除外するものは何もありません。
  • コード ベースは適切に管理されており、テスト ケースを完全に制御できます。
于 2011-02-15T16:43:46.410 に答える