2017-11-10 1 views
1

私はcucumber jsを使用していくつかのテストを自動化しようとしており、1つはnew Date()を呼び出す関数に依存しています。オーバーライドスクリプトを実行している日付コンストラクタ

私はこのスクリプトを実行し、このような日付を上書きしようとしました。

const driver = (this.driver as ThenableWebDriver); 
    await driver.get(`http://localhost:5000/`); 
    await driver.executeScript(` 
     var d = new Date(2012,0,20); 
     Date = function(){return d;} 
    `); 

私は

await driver.executeScript(` 
     alert(new Date()) // returns the date i set 
    `); 
で再びexecuteScript関数を呼び出す場合、新しい日付が正しく返されます。 しかし、私はクリックをシミュレートし、onClickは新しいDate()を実行しますが、ローカルDateを取得し、設定した日付は取得しません。

チップはありますか?事前

で 感謝[EDIT]は、ここでこれを見た:How to override new Date() on Protractor tests

var Date = (function() { 
var OldDate = Date; 
return function(){ 
return new OldDate(2012,0,20); 
} 
}()); 

しかし、まだ運を。 executeScriptはどこで実行されますか?コンストラクタDateオーバーライドすること

+0

を私はonclickのコールバックをコード化され、私は、新しいDate()明示的に呼び出します – Franmcod

答えて

1

await driver.executeScript(` 
    var Date = function() {       // new constructor 
    return new window.Date.prototype.constructor(2013, 6, 14); 
    } 
    Date.prototype = window.Date.prototype;   // inherit the methods from Date 
    Date.now = Date;        // override Date.now() 
    Date.UTC = Date.prototype.constructor.UTC;  // copy Date.UTC(...) 
    Date.parse = Date.prototype.constructor.parse; // copy Date.parse(...) 
    window.Date = Date;        // override Date 
`); 
関連する問題