11

我有一系列针对使用 ECMAScript 国际化 APIJasmine的服务运行的测试。AngularJs当我通过 Chrome 运行它们时,它们都运行成功。但是,当我PhantomJS通过 maven 运行它们时,它们都失败了,因为它似乎PhantomJs还不支持 Internationalization 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-我的假设是否正确,PhantomJS v1.9.2不支持ECMAScript internationalization API?有没有办法证实这一点?

2-我该如何解决这个问题?我需要通过 maven 运行我的测试,并且我将有更多的测试以一种或另一种方式访问​​我的本地化服务 API。
谢谢

4

2 回答 2

23

不确定您是否使用 Karma,但这是我必须做的以解决相同的问题。

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

    这也将安装 polyfill 库 Intl;

  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',
    ...
    
于 2016-08-07T08:13:33.033 回答
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 的 Google 分支,因为它们之间的分歧太大,难以追赶。Chrome 比 Safari 拥有更多的市场(不是和邀请火焰战争,只是个人意见没有任何分量 :-)

我不熟悉 PhantomJS,也不知道它提供了什么,但如果您可以将 JavaScript 测试分开以在 v8 上运行,您可以尝试使用它从命令行进行测试。构建 beeding_edge 很轻松,我在 Win、Mac OS X 和 Linux 上都没有任何问题。

于 2013-10-09T06:08:20.153 回答