1

初めてSOに問題を投稿するときは、正しくやっているといいのですが。

it (' :: 2.0 service creation :: should fill out service info tab', function(){
    createNewService.setServiceName(e2eConfig.newServiceDetails.basicServiceName);
    createNewService.selectCategory();
    createNewService.setIntroText(e2eConfig.newServiceDetails.introText);
    createNewService.selectParent();
    createNewService.uploadIcon();
    createNewService.nextTab();
    //right now assert will fire off without running the methods above because
    //we are still on the infoTab
    assert(($(createNewService.selectors.infoTab).isDisplayed()) == true, 'did not move to the next tab');
},20000);

このテストが行​​うことは、入力を埋め、必要に応じてドロップダウンを選択し、ファイルをアップロードすることです。

次に、テストはウィジェット内の次のタブに切り替えようとします。

次のタブに切り替えることができたかどうかを判断するために、カスタム メッセージを使用して chai ライブラリ アサーションを作成します。

  • 現在のコードでは、アサートは true を返します。これは、infoTab が表示され、アサートの前にメソッドを実行せずにテストが失敗するためです。

  • 「!== true」を探すようにアサート行を変更すると、メソッドが実行されて先に進みます

いずれにせよ、これを別の方法で行うか、またはアサートの代わりに期待を使用する方がよいでしょうか?

Chai アサート API

APIを期待しちゃいます

4

1 に答える 1

1

すべての分度器関数呼び出しは、非同期的に解決される promise を返すため、定義した関数createNewServiceがすべて分度器関数を呼び出している場合は、アサートを呼び出す前にそれらが解決するのを待つ必要があります。次のようなことを試してください。

it (' :: 2.0 service creation :: should fill out service info tab', function(done) {
  createNewService.setServiceName(e2eConfig.newServiceDetails.basicServiceName);
  createNewService.selectCategory();
  createNewService.setIntroText(e2eConfig.newServiceDetails.introText);
  createNewService.selectParent();
  createNewService.uploadIcon();
  createNewService.nextTab().then(function() {
    assert.eventually.strictEqual($(createNewService.selectors.infoTab).isDisplayed(), true, 'did not move to the next tab');
    done();
  });
},20000);

注意すべき点がいくつかあります。

  • createNewService.nextTab()この例では、 が promise を返すことを前提としています。
  • promiseから返された値のアサーションを処理するには、chai-as-promised のようなライブラリを使用する必要があります。あなたのコードでは、promise オブジェクト == true であると主張していますが、これは強制により真実です。
  • 関数は非同期で実行されるため、無名関数にコールバックを渡して、テストの終了時にそれを呼び出す必要があります。非同期コードのテストに関する情報は、ここにあります。
于 2015-05-21T18:21:09.370 に答える