PhantomJS不支持Javascript国际化API
我对使用ECMAScript国际化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
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...
frameworks: ['intl-shim'],
...
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
的更改生效之前,您必须打破这一限制并重新启动流程。在那一次上损失了大约一个小时。。。