web-dev-qa-db-ja.com

パラメータを使用した分度器テストのループ

私はすべてほとんど同じである煙幕テストのセットを持っています。それらをループに入れて、パラメーターの配列でループさせたいと思います。ただし、テストは非同期で実行されるため、テストが実行される前にループが完了します。これにより、各パラメーターに対して1回ではなく、8番目のパラメーターに対して8回テストが実行されます。

describe('Admin Console Campaigns', function() {
    var ptor;
    var adminUrl;
    var testParams = [
        {title: 'Dashboard', urlSuffix: '/communic8' },
        {title: 'Campaign Report', urlSuffix: '/Reports/Campaign' },
        {title: 'Partner Campaign Usage', urlSuffix: '/Reporting/PartnerCampaignUsage' },
        {title: 'Campaign Template Usage', urlSuffix: '/Reporting/CampaignTemplateUsage' },
        {title: 'Email Usage Report', urlSuffix: '/Reports/EmailUsage' },
        {title: 'Campaign Templates', urlSuffix: '/CampaignTemplates' },
        {title: 'Campaign Template Groups', urlSuffix: '/CampaignTemplateGroups' },
        {title: 'New Template', urlSuffix: '/CampaignTemplates/Add' }
    ];

    beforeEach(function() {
        ptor = protractor.getInstance();
        ptor.ignoreSynchronization = true;
        var testParams = smokescreenTestConfig.adminCampaigns;
        adminUrl = ptor.params.http + ptor.params.client + ptor.params.staging + ptor.params.sharedvue + ptor.params.admin;
    });

    afterEach(function(){

    });

    for(var i=0; i < testParams.length; i++){
        var testParam = testParams[i];

        it('should have a ' + testParam.title + ' tab', function() {
            testUrl = adminUrl + testParam.urlSuffix;
            basicTestFunctions.pageExists(testUrl, ptor, browser, testParam.title);
        }, 60000);
    };
});

ループを強制的にテストを待機させる方法を知っている人はいますか?

12
Robert McCraw

少し前にこれを理解しました。申し訳ありませんが、ここに投稿したことを忘れてしまいました。基本的に、別のファイルに構成配列を作成し(これは必須ではありませんが、コードを読みやすくするだけです)、繰り返したいテストのすぐ上の変数にその配列をプルしました。次に、ループ内の関数でテストを囲み、各ループで配列からの行を渡しました。

var testParams = testConfig.testArray;

for (var i = 0; i < testParams.length; i++) {

  (function (testSpec) {
    it('write your test here', function () {
      //test code here
    });
  })(testParams[i]);

};

ここで重要なのは、ループの反復で渡される関数の最後にある「testParams [i]」です。これにより、同期実行が強制されます。

本当に夢中になりたい場合は、このスモークスクリーンをすべてのクライアントで約50回連続して実行するバッチファイルを作成することもできました。プラットフォーム全体を約10分でスモークスクリーンします。

23
Robert McCraw

仕様を使用して配列を作成することもできます。

var testParams = testConfig.testArray;

testParams.forEach(function(testSpec) {
    it('write your test here', function() {
        //test code here
    });
});

これは、RobertMcCrawによって提案されたソリューションのように機能するはずです。

8
Michele Sr

一部の非同期コードを使用すると、これを非常に簡単に解決できます。

it('description', function () { // my test });を実行する代わりにit('description', function (done) { // my test with a call to done() at the end }を使用します

このスニペットを例として使用できます:

for (var i = 0; i < 10; i++) {
  it('should work for ' + i, function (done) {
    setTimeout(done, 1000);
  });
}  

期待される出力:

✓ should work for 0 (1000ms)
✓ should work for 1 (1001ms)
✓ should work for 2 (1001ms)
✓ should work for 3 (1001ms)
✓ should work for 4 (1001ms)
✓ should work for 5 (1001ms)
✓ should work for 6 (1002ms)
✓ should work for 7 (1001ms)
✓ should work for 8 (1001ms)
✓ should work for 9 (1002ms)

お役に立てれば。

2
Furzel