2017-03-13 10 views
0

私は分度器を使用しており、タイムスタンプに基づいてファイル名でファイルを作成しようとしています。問題は、browser.sleep()を使用してタイムスタンプ(ファイル名を作成するために使用される)を作成する前に無作為に時間を待っていても、ファイル名は互いに約50ms以内です。分度器:現在の仕様をトラッキングする

if (instanceCount < 4) { 
     var randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500; 
     console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " ms"); 
     browser.sleep(randomNumber); 
    } 

    var date = new Date(); 
    timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' + 
     date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms'; 

    fs.writeFileSync(filepath + timeStamp, 'utf8'); 

    instanceCount = fs.readdirSync(filepath).length; 

timeStamp変数は、browser.sleep()関数を無視しているようです。私は、約束を返す関数を使ってみましたが、それを働かせることはできませんでした。ここに私が思い付いたものです:私は正しい軌道に乗って、および/または、これは、フロー制御/実行の面で理にかなっている場合だ場合

var getTimestamp = function() { 
     return new Promise(function (resolve, reject) { 

      if (instanceCount < 4) { 
       var randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500; 
       console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " seconds"); 
       browser.sleep(randomNumber); 
      } 

     }); 
    }; 

     getTimestamp().then(function() { 
      var date = new Date(); 
      timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' + 
       date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms'; 

       fs.writeFileSync(filepath + timeStamp, 'utf8'); 
     }, 

誰かが私に言うことはできますか?

+0

いくつかのファイルに任意のタイムスタンプを書き込もうとするのではなく、他の意味のあるファイルを書き込むための方法があります。あなたはジャスミン - 記者を使用し、連結を虚偽に使用することができます。これはspecでファイルを書き出します。このhttps://github.com/angular/protractor-cookbook/blob/master/jasmine-junit-reports/conf.js#L18を参照してください。ブロッキングプロキシ機能を使用してログを分離することもできます。プロキシをブロックする方法の詳細については、https://github.com/angular/blocking-proxyのreadmeファイルを参照してください。 – cnishina

+0

私はjasmine-reportersを使ってみましたが、私が働くことができる唯一の方法はaddReporterメソッドでした。私は既にレポーターを私のコンソールに記録しています。タイムスタンプからファイルを命名するのはベストプラクティスのようには思えませんが、このコードから必要な主な機能は、指定された時点でフォルダ内のファイルの数を読み取ることです。ファイルそのものは重要ではなく、ファイル名をタイムスタンプとして持つことは、実行中の状況を示すのに役立ちます。私は何を意味するかを示すためにinstanceCount変数を使って質問を更新しました – Tom

+0

これについて料理を試しましたか?スペックによってそれを分けるべきです。すべてのテストが1つのファイルに含まれている場合、1つのファイルしか生成されません。 – cnishina

答えて

0

新しい約束を使用する場合、あなたの方法は約束を解決する必要があります。また、browser.sleepを使用する場合は、その約束を返す必要があります。下の例では、ブール値を返すようにチェーンしました。これにより、ファイルを書き込むかどうかを決定するのに役立ちます。

/** 
* gets the timestamp should resolve and return a promise 
* @returns Promise<boolean> if true, it is instanceCount < 4. false 
*   if instanceCount >= 4 
*/ 
let getTimestamp = function() { 
    if (instanceCount < 4) { 
    let randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500; 
    console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " seconds"); 
    return browser.sleep(randomNumber).then(() => { return true }); 
    } else { 
    return Promise.resolve(false); 
    } 
}; 

getTimestamp().then((result)=> { 
    if (result) { 
    let date = new Date(); 
    timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' + 
    date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms'; 
    fs.writeFileSync(filepath + timeStamp, 'utf8'); 
    } 
} 
0

私はさん).then方法(browser.waitを使用することを含むcnishinaから多くの援助で解決策を見つけたと私は実行を必要な場所に(約50行)のすべての方法ダウンし、それを拡張します同期する。クールなことは、.then関数の終了後のすべてが非同期で実行されることです。つまり、実際に時間が無駄になることはありません。

 browser.sleep(randomNumber).then(function() { 

      var date = new Date(); 
      timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' + 
       date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms'; 

      fs.writeFileSync(filepath + timeStamp, 'utf8'); 

      //.then function continues...