我有一系列针对使用 ECMAScript 国际化 API 的AngularJs
服务运行的Jasmine
测试。 当我通过Chrome运行它们时,它们都成功运行。但是,当我使用 PhantomJS
通过 maven 运行它们时,它们都失败了PhantomJs
因为似乎还不支持国际化 API。
我收到的使用 Intl 对象进行测试的错误消息是:
1:引用错误:找不到变量:本地化服务中的国际.js
其余的测试都失败了。
测试很简单,看起来像这样:
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。
谢谢
不确定您是否在使用 Karma,但这是我必须做的来解决相同问题的方法。
-
npm install karma-intl-shim --save-dev
这也将安装填充文库国际;
-
将"intl-shim"添加到karma.conf.js中的框架集合中:
... frameworks: ['intl-shim'],
-
在 karma.conf.js 中添加您希望测试的语言环境文件,例如"en-US":
... files: [ './node_modules/Intl/locale-data/jsonp/en-US.js', ...
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的Google分支,在此之前它们分歧太大,很难赶上。Chrome 比 Safari 拥有更多的市场(不是和火焰战争的邀请,只是个人意见,没有任何权重:-(
我不熟悉PhantomJS,也不知道它提供了什么,但是如果你可以将JavaScript测试分开在v8上运行,你可以尝试使用它从命令行进行测试。构建beeding_edge是无痛的,我在Win,Mac OS X和Linux上做到了,没有任何问题。