2012-08-31 17 views
6

ウェブサイトのロケーション機能をテストしたいので、このテストを行うには別のタイムゾーンを試す必要があります。私は次の関数を呼び出して、JavaScriptコードとタイムゾーンを取得します。私はアルゼンチンのだからブラウザのタイムゾーンを模擬する方法は?

var offset = new Date().getTimezoneOffset(); 

は今、この機能は私に180を返し、私は別の時間帯でテストする必要があります。誰かがこれを行う方法を知っていますか? 多くの感謝!

+0

コンピュータのタイムゾーンを変更します。それはブラウザがそれを取得する場所です。 –

+2

ブラウザを別のTZで起動することもできます:http://stackoverflow.com/questions/11453740/fake-time-zone-for-web-app-testing –

答えて

16

受け入れられた答えは実際にDate.getTimezoneOffsetメソッドをモックしていませんが、代わりに同じ名前の別のメソッドを使用することを期待しています。

Dateオブジェクト自体では機能しません。またCarl Meyer氏が指摘するように、MomentJSなどのライブラリでは機能しません。

DateプロトタイプのgetTimezoneOffsetメソッドをオーバーライドして、Dateのすべてのインスタンスがオーバーライドされたメソッドを持つようにすることをお勧めします。

d = new Date(); // Mon Jul 13 2015 10:58:12 GMT+0200 (CEST) 
alert(d.getTimezoneOffset()); // -120, My local "real" timezone. 

// Save the original method. 
var getTimezoneOffset = Date.prototype.getTimezoneOffset; 

Date.prototype.getTimezoneOffset = function() { 
    return 160; 
} 
// Now Date objects will have the mocked timezone offset 
alert(d.getTimezoneOffset()); // 160, The mocked timezone. 

// Now restore the method to its original version 
Date.prototype.getTimezoneOffset = getTimezoneOffset; 
alert(d.getTimezoneOffset()); // -120 
+0

あなたが使っているライブラリに応じて、いくつかのライブラリは "やりたい"と思っています。そして、これらのライブラリを追加のコードで "修正"しようとすると、予期せず....特に[ハリウッドの原則](https://en.wikipedia.org/wiki/Inversion_of_control)を使用している人にとっては、 [適切な開発ツール](http://stackoverflow.com/questions/4976696/how-do-i-test-my-browser-timezone-dependent-application-againts-different-timezo#comment58949204_4976769)があれば、より良いでしょう。それは.... – Pacerier

+0

答えは私には意味がありますが、コードを見ると、元のバージョンを保存するためのステートメントがなくなっている可能性があります。例えば、 'var getTimezoneOffset = Date.prototype.getTimezoneOffset;'のようなものです – mikeapr4

+0

Thanks @ mikeapr4、あなたが正しい。私は不足している課題を追加しました。 –

-7

これには関数を使用できます。 DEBUG

function getTimezoneOffset() { 
    if (DEBUG) { 
    return 600; // for Australian Eastern Standard Time 
    } 

    return new Date().getTimezoneOffset(); 
} 

は、あなたがテストしたりしていないかどうかを判断するために、以前に設定した変数です。

その後、Dateオブジェクトのメソッドではなく、コード全体でこの関数を使用します。

+5

これは、ライブラリを使用している場合には役に立ちません'MomentJS'のように - あなたのラッパー関数の使用を強制することはできません。 –

関連する問題