4

ユーザー A のブラウザーで実行されたアクションがユーザー B のブラウザーに副作用をもたらす共同 Web アプリがあります。チャット ルームはアプリの一部であり、私たちがテストしようとしているものの良い例です。

現在のスタックは次のとおりです。

  • フロントエンドのAngularJS
  • 静的ファイルを提供するために Node 上で実行される Express
  • クライアントブラウザ間のWebソケット通信を処理するためにノード上で実行されるSocket.IO
  • ビルド プロセスのブランチ
  • Angular Seed はテストの出発点です
  • 実際のテスト フレームワークのジャスミン
  • Testacular がテストを実行します

これをテストするための最良の方法は何ですか? そして、「最高」とは「あらゆる」を意味します。完全統合テストには、2 つのブラウザーと 2 つの Web サーバー (HTML および Web ソケット) が必要です。どちらの Web サーバーも Node 上で実行されているため、少なくとも Testacular の残りの部分と同じ環境にあります。

私の考えでは、それは必要になるでしょう

  1. ソケットサーバーのインスタンスを開始する
  2. Jasmine で Web ブラウザーを起動し、そのブラウザー A への参照を保持する
  3. 別のブラウザー、ブラウザー B を起動し、その参照を保持します。
  4. ブラウザ A にコマンドを発行し、結果の変更をブラウザ B でテストします。

この種のテストのドキュメントや例 (Jasmine を使用した Testacular が望ましいですが、オプションは自由です) に出くわした人はいますか? どの検索用語を使用するかについてのアドバイスも役立ちます。

4

1 に答える 1

0

私のアドバイスが役に立つかどうかはわかりませんが、とにかく。

私の頭に浮かぶ最初のツールはSeleniumです。良いニュース (現在使用しているスタックに基づく) は、JavaScriptテストの作成に使用できることです。「チーズ」という用語を検索しGoogle、結果ページのタイトルをコンソールに出力する例を次に示します。

var driver = new webdriver.Builder().build();
driver.get('http://www.google.com');

var element = driver.findElement(webdriver.By.name('q'));
element.sendKeys('Cheese!');
element.submit();

driver.getTitle().then(function(title) {
  console.log('Page title is: ' + title);
});

driver.wait(function() {
  return driver.getTitle().then(function(title) {
    return title.toLowerCase().lastIndexOf('cheese!', 0) === 0;
  });
}, 3000);

driver.getTitle().then(function(title) {
  console.log('Page title is: ' + title);
});

driver.quit();

Selenium 2 では、ブラウザのより多くのインスタンスを「開く」可能性があると思います。これは、副作用やそれらの間の相互作用をテストできることを意味します。

別の方法として、WindMillプロジェクト、UItest.js、または Selenium を使用する商用製品Twist、または (Spudley によっても言及されている) Sahiテスト用ドライバーとして使用することもできます。

于 2013-03-08T19:39:48.813 に答える