API Интернационализации Javascript не поддерживается PhantomJS
У меня серии Jasmine
тесты, работающие против AngularJs
сервис, который использует Интернационализация API ECMAScript. Все они работают успешно, когда я запускаю их через Chrome. Тем не менее, когда я использую PhantomJS
чтобы прогнать их через Maven, все они терпят неудачу, как кажется PhantomJs
пока не поддерживает API Интернационализации.
Сообщение об ошибке, которое я получаю для тестов с использованием объекта Intl:
1: ReferenceError: Не удается найти переменную: Intl в localizationService.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, и у меня будет больше тестов, использующих мой localizationService API так или иначе.
Спасибо
2 ответа
Не уверен, используете ли вы карму или нет, но вот что я должен был сделать, чтобы решить ту же проблему.
npm install karma-intl-shim --save-dev
Это также установит библиотеку polyfill Intl;
Добавьте '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 не поддерживает API интернационализации ECMAScript? Есть ли способ подтвердить это?
Похоже, что PhantomJS основан на WebKit, поэтому он не поддерживает новый API интернационализации ECMAScript.
Даже для 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, и у меня будет больше тестов, использующих мой localizationService API так или иначе.
Если бы я был сопровождающим PhantomJS, я бы подумал о том, чтобы пойти с веткой Google WebKit, до того, как они слишком сильно расходятся и делают их слишком сложными для наверстывания. У Chrome больше рынка, чем у Safari (нет и приглашения на пламенные войны, просто личное мнение без какого-либо веса:-)
Я не знаком с PhantomJS и не знаю, что он предлагает, но если вы можете разделить тесты JavaScript для запуска на v8, вы можете попробовать использовать его для тестирования из командной строки. Сборка beeding_edge была безболезненной, и я сделал это без проблем на Win, Mac OS X и Linux.