2016-12-01 4 views
0

JavaScript日付オブジェクトを現地時間に変換してから特殊フォーマットを使用してフォーマットします。ビルドサーバーがグローバルである場合、Jasmineを使用してJavaScriptでローカル日付変換をテストするにはどうすればよいですか?

変換が正しいことを確認するためのテストを作成したいが、ビルドサーバーの場所によってはローカル時間が異なるため、生成される日付文字列が異なる。

これらのテストにはベストプラクティスがありますか?

+0

あなたは、これまで何を試してみましたか?通常これは、私がspyOnとreturnValueを使ってテストに必要なデータを模擬したものです。 –

+0

JavaScriptを強制的に注入されたタイムゾーンを使用することを望んでいました。それを行う方法があるかどうかわからない場合 –

+0

あなたがこれまでに試したことを投稿した場合は役に立ちます。 –

答えて

0
  • この質問は比較的不完全ですが、私は スタブを持っていきたいと思います。私に連絡してくださいfiddle here
  • 質問とコメントから、ここに私が想定したものがあり、私の ソリューションはこの前提に基づいています。

仮定:

  1. あなたが実際に特定の時間帯で応答 サーバーを信じるので、タイムゾーンを注入しようとしています。
  2. 1が真であると仮定して、ダミーの を作成するテストをいくつか作成しました。それぞれ特定のタイムゾーンを持ちます。
  3. どのような方法でテストしたいのか明確ではありませんが、 私はいくつかテストしています。 toLocaleDateString & getUTCDate
  4. あり は、ユーザーからかもしれない場所についての情報がなかったので、私は彼が米国(EST)からである を画像化し、それに応じた方法を嘲笑のです。私のテストは関係なく、どこの失敗しないように

  5. また、私は米国 ユーザーの周りに私のテストを中心としてきたものの、彼は理論的にはどこにでも可能性がありますのでご注意ください、それゆえ私はスパイ &リターンを使用しましたから テストを実行します。

  6. しかし、UTCメソッドでスパイを使用していないのは、どこから呼び出すかにかかわらずUTC です。

    /** I've run these tests from US(EST) **/ 
    /** Testing from the observers location which is US **/ 
    describe('js date testing', function() { 
        it('build server from UK', function() { 
        var ukDate = new Date("Mar 25 2015 01:56:24 UTC+0000"); 
        // If I print ukDate as is- I see Tue Mar 24 2015 20:56:24 GMT-0400 (Eastern Daylight Time) 
        // But lets mock it since we would like the tests to pass as I assume the user is in US. 
        spyOn(ukDate, 'toLocaleDateString').and.returnValue("3/24/2015"); 
        var val = ukDate.toLocaleDateString(); 
        expect(val).toEqual("3/24/2015"); 
        expect(ukDate.getUTCDate()).toEqual(25); 
        }); 
    
        it('build server from another planet that is 22 hours east of UK', function() { 
        var aliensWatch = new Date("Mar 25 2015 01:56:24 UTC+2200"); 
        // If I print aliensWatch as is- I see Mon Mar 23 2015 23:56:24 GMT-0400 (Eastern Daylight Time) 
        // But lets mock it since we would like the tests to pass as I assume the user is in US. 
        spyOn(aliensWatch, 'toLocaleDateString').and.returnValue("3/23/2015"); 
        var val = aliensWatch.toLocaleDateString(); 
        expect(val).toEqual("3/23/2015"); 
        expect(aliensWatch.getUTCDate()).toEqual(24); 
        }); 
    
    }); 
    

Additional sources

関連する問題