11

ECMAScript 国際化 API を使用するサービスに対して一連のJasmineテストを実行しています。AngularJsChromeで実行すると、すべて正常に実行されます。ただし、PhantomJSMaven を使用してそれらを実行すると、PhantomJs国際化 API をまだサポートしていないように見えるため、すべて失敗します。

Intl オブジェクトを使用したテストで得られるエラー メッセージは次のとおりです。

1: ReferenceError: 変数が見つかりません: localizationService.js の Intl

そして、残りのテストは単に失敗します。

テストは単純で、次のようになります。

it('Format date with en-us locale', (function (){
    var date= "06/13/2013"
    expect(service.date(date,'en-us')).toEqual("6/13/2013");
}))

サービスのメソッド (localizationService.js) は、Intl API の単純なラッパーです。

function getCurrentTimeZone(){
    return Intl.DateTimeFormat().resolved.timeZone
}

function date(dateInput,locale,options){
        // some other stuff
        // ... 
        if (locale) {
            return _date.toLocaleDateString(locale,options);
        } else {
            return _date.toLocaleDateString();
        }
}

私の質問は次のとおりです。

PhantomJS v1.9.21-をサポートしない私の仮定は正しいECMAScript internationalization APIですか? とにかくそれを確認することはありますか?

2- この問題を解決するにはどうすればよいですか? Maven を使用してテストを実行する必要があり、localizationService API にいずれかの方法でヒットするテストがさらに必要になります。
ありがとう

4

2 に答える 2

6

1- PhantomJS v1.9.2 が ECMAScript 国際化 API をサポートしていないという私の仮定は正しいですか? とにかくそれを確認することはありますか?

PhantomJS は WebKit に基づいているように見えるため、新しい ECMAScript 国際化 API をサポートしていません。

Chrome の場合でも、API が V8 になったのはつい最近のことで、まだメインではなく beeding_edge にあります。 i18n ファイル (.cc、.h、.js)。これは、WebKit からの分割後を意味します。

i18n サポートの現在のステータスは次のとおりです: http://mihai-nita.net/2013/07/28/javascript-internationalization-api/

2- この問題を解決するにはどうすればよいですか? Maven を使用してテストを実行する必要があり、localizationService API にいずれかの方法でヒットするテストがさらに必要になります。

私が PhantomJS のメンテナーである場合、WebKit の Google ブランチを利用することを検討します。Chrome は Safari よりも多くの市場を持っています (炎上戦争への招待ではありません。重みのない個人的な意見です :-)

私は PhantomJS に詳しくなく、それが提供するものもわかりませんが、v8 で実行する JavaScript テストを分離できる場合は、コマンド ラインからのテストに使用してみてください。beeding_edge のビルドは簡単で、Win、Mac OS X、Linux で問題なく実行できました。

于 2013-10-09T06:08:20.153 に答える