Javascript Internationalization API is not supported by Phan



我有一系列针对使用 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,但这是我必须做的来解决相同问题的方法。

  1. npm install karma-intl-shim --save-dev

    这也将安装填充文库国际;

  2. 将"intl-shim"添加到karma.conf.js中的框架集合中:

    ...
    frameworks: ['intl-shim'],
    
  3. 在 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上做到了,没有任何问题。

相关内容

  • 没有找到相关文章

最新更新