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,但这是解决同样问题我必须做的事情.
npm install karma-intl-shim --save-dev
这也将安装polyfill库Intl;
将'intl-shim'添加到karma.conf.js中的frameworks集合中:
...
frameworks: ['intl-shim'],
Run Code Online (Sandbox Code Playgroud)在karma.conf.js中添加要测试的语言环境文件,例如'en-US':
...
files: [
'./node_modules/Intl/locale-data/jsonp/en-US.js',
...
Run Code Online (Sandbox Code Playgroud)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上做到了没有任何问题.
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |