PhantomJS不支持Javascript Internationalization API

Ali*_*dad 10 javascript internationalization phantomjs angularjs ecmascript-intl

Jasmine针对AngularJs使用ECMAScript Internationalization API 的服务运行了一系列测试.当我通过Chrome运行它们时,它们都成功运行.但是,当我使用PhantomJSmaven运行它们时,它们都会失败,因为它似乎PhantomJs还不支持Internationalization API.

我使用Intl对象获得的测试错误消息是:

1:ReferenceError:找不到变量:localService.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");
}))
Run Code Online (Sandbox Code Playgroud)

服务中的方法(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();
        }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

1-我的假设是否正确,PhantomJS v1.9.2不支持ECMAScript internationalization API?无论如何要确认吗?

2-如何解决此问题?我需要通过maven运行我的测试,我将有更多测试以某种方式击中我的本地化服务API.
谢谢

Pet*_*eii 23

不确定你是否使用了Karma,但这是解决同样问题我必须做的事情.

  1. npm install karma-intl-shim --save-dev

    这也将安装polyfill库Intl;

  2. 将'intl-shim'添加到karma.conf.js中的frameworks集合中:

    ...
    frameworks: ['intl-shim'],
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在karma.conf.js中添加要测试的语言环境文件,例如'en-US':

    ...
    files: [
          './node_modules/Intl/locale-data/jsonp/en-US.js',
    ...
    
    Run Code Online (Sandbox Code Playgroud)


Mih*_*ita 6

1-我的假设是否正确,PhantomJS v1.9.2不支持ECMAScript国际化API?无论如何要确认吗?

看起来PhantomJS基于WebKit,因此它不支持新的ECMAScript国际化API.

即使对于Chrome,API最近才进入V8,它仍处于beeding_edge,而不是主要:请参阅http://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/, i18n文件(.cc,.h,.js).这意味着从WebKit拆分后.

以下是i18n支持的当前状态:http: //mihai-nita.net/2013/07/28/javascript-internationalization-api/

2-如何解决此问题?我需要通过maven运行我的测试,我将有更多测试以某种方式击中我的本地化服务API.

如果我是PhantomJS的维护者,我会考虑使用WebKit的谷歌分支,在它之前它们分歧过多并且难以赶上.Chrome拥有比Safari更多的市场(不是和火焰战争的邀请,只是一个没有任何重量的个人意见:-)

我不熟悉PhantomJS,我不知道它提供了什么,但是如果你可以将JavaScript测试分开运行在v8上,你可以尝试使用它来从命令行进行测试.建立beeding_edge是无痛的,我在Win,Mac OS X和Linux上做到了没有任何问题.