PhantomJS不支持Javascript国际化API

PhantomJS不支持Javascript国际化API,javascript,angularjs,internationalization,phantomjs,ecmascript-intl,Javascript,Angularjs,Internationalization,Phantomjs,Ecmascript Intl,我对使用ECMAScript国际化API的AngularJs服务运行了一系列Jasmine测试。当我通过Chrome运行它们时,它们都成功运行。然而,当我使用PhantomJS通过maven运行它们时,它们都失败了,因为PhantomJS似乎还不支持国际化API 对于使用Intl对象的测试,我得到的错误消息是: 1:ReferenceError:在localizationService.js中找不到变量:Intl 其余的测试都失败了 测试很简单,如下所示: it('Format date wit

我对使用ECMAScript国际化API的
AngularJs
服务运行了一系列
Jasmine
测试。当我通过Chrome运行它们时,它们都成功运行。然而,当我使用
PhantomJS
通过maven运行它们时,它们都失败了,因为
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();
        }
}
我的问题是:

1-我的假设正确吗
phantomjsv1.9.2
不支持
ECMAScript国际化API
?还有什么可以证实的吗

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

1-我认为PhantomJSV1.9.2不支持 ECMAScript国际化API?还有什么可以证实的吗

看起来PhantomJS是基于WebKit的,所以它不支持新的ECMAScript国际化API

即使是Chrome,API最近才进入V8,它仍然处于beeding_edge,而不是main: 请参阅i18n文件(.cc、.h、.js)。这意味着在从WebKit拆分之后

以下是i18n支持的当前状态:

2-如何解决此问题?我需要运行我的测试 通过maven,我将有更多的测试达到我的目标 本地化服务API的一种或另一种方式

如果我会成为幻象的维护者,我会考虑与WebKIT的谷歌分支公司进行合作,在它们分叉太多,难以赶上之前。 Chrome比Safari更具市场占有率(不受火焰之战的影响,只是个人观点,没有任何分量:-)

我不熟悉PhantomJS,也不知道它提供了什么,但是如果您可以将JavaScript测试分离出来在v8上运行,您可以尝试从命令行使用它进行测试。
构建beeding_edge毫无痛苦,我在Win、Mac OS X和Linux上做到了这一点,没有任何问题。

不确定您是否使用了Karma,但以下是我必须做的来修复相同的问题

  • npm安装karma intl shim--保存开发文件

    这也将安装polyfill库Intl

  • 在karma.conf.js中的frameworks集合中添加“intl shim”:

    ...
    frameworks: ['intl-shim'],
    
  • 在karma.conf.js中添加要测试的语言环境文件,例如“en-US”:

    ...
    files: [
          './node_modules/Intl/locale-data/jsonp/en-US.js',
    ...
    

  • 米海,非常感谢你的回答。我将尝试V8方法。另外,如果我想在api成熟时试驾另一个库,您会推荐什么?我玩过moment、timezonejs,还有很多其他的,但是对于时区敏感的项目来说,什么才是可靠的呢?现在大多数JavaScript框架都有i18n的功能,包括jQuery、Dojo和Close。我对它们不是很熟悉,我宁愿赌标准或标准的垫片。闭包对时区有一些功能,但我并没有真正使用它(,和时区感知的日期/时间格式)。这个答案更好。我建议接受这一正确答案。干杯也为我工作。除了上述步骤之外,还必须在karma.conf.js中的插件数组中添加这一行:require(“karma intl shim”)。如果您使用--single run=false运行测试,那么在对
    karma.conf.js
    的更改生效之前,您必须打破这一限制并重新启动流程。在那一次上损失了大约一个小时。。。