我针对使用ECMAScript Internationalization API的Jasmine
服务运行了一系列AngularJs
次测试。当我通过Chrome运行它们时,它们都成功运行。但是,当我使用PhantomJS
通过maven运行它们时,它们都会失败,因为它似乎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");
}))
并且服务中的方法(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-我的假设是否正确PhantomJS v1.9.2
不支持ECMAScript internationalization API
?无论如何要确认吗?
2-如何解决此问题?我需要通过maven运行我的测试,我将有更多测试以某种方式击中我的本地化服务API 谢谢
答案 0 :(得分:23)
不确定您是否使用了Karma,但这是解决相同问题所必须做的事情。
npm install karma-intl-shim --save-dev
这也将安装polyfill库Intl;
将'intl-shim'添加到karma.conf.js中的frameworks集合中:
...
frameworks: ['intl-shim'],
在karma.conf.js中添加您要测试的语言环境文件,例如'en-US':
...
files: [
'./node_modules/Intl/locale-data/jsonp/en-US.js',
...
答案 1 :(得分:6)
1-我的假设是否正确,PhantomJS v1.9.2不支持 ECMAScript国际化API?无论如何要确认吗?
看起来PhantomJS基于WebKit,所以它不支持新的ECMAScript国际化API。
即使对于Chrome,API最近才进入V8,它仍然在beeding_edge中,而不是在main中: 请参阅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上做到了没有任何问题。