#javascript #unit-testing #momentjs #karma-jasmine
#javascript #модульное тестирование #momentjs #karma-jasmine
Вопрос:
Я пишу несколько модульных тестов для своего приложения AngularJS с karma и jasmine. Я также использую momentjs.
Когда я вызываю ту же функцию из библиотеки moment в браузере, я получаю другой результат, чем в модульном тестировании karma.
Это нарушает мои модульные тесты.
В браузере это то, что я получаю:
В моем модульном тестировании я получаю другой результат. Например, когда я вызываю функцию, чтобы получить начало месяца и недели, я получаю «1» вместо 53 для номера недели.
Calendar.data.currentCalendarMonth = moment('01-01-2017', dateFormat).clone().startOf('month');
//showing different results than in the browser
console.log(Calendar.data.currentCalendarMonth.format());
console.log(' week ', Calendar.data.currentCalendarMonth.week());
Вот мой codepen с воспроизведенной ошибкой:
https://codepen.io/aubz/pen/VNQjgV
Редактировать: я использую эти зависимости момента в своем проекте:
"moment-timezone": "0.5.4",
'moment/min/moment-with-locales.js',
'moment-timezone/builds/moment-timezone-with-data.js',
Комментарии:
1. можете ли вы изложить суть? не удается воспроизвести
2. @DanBachar готово
3. Что отображается при вставке
moment.locale()
в консоль браузера? «en» или «fr» или другие?4. Что меня озадачивает, так это то, что в 2016 году всего 52 недели: epochconverter.com/weeks/2016 , так что результат вашего браузера неверен… Либо из-за какой-то ошибки в moment.js , или это вызвано
week
влиянием локали: momentjs.com/docs/#/get-set/week5. ru в браузере и в модульном тестировании
Ответ №1:
Проблема заключалась в том, что мое приложение использовало en-us, а модульные тесты использовали en-gb. Мне пришлось явно установить локаль в moment в модульных тестах.
beforeEach(inject(function (_Calendar_) {
Calendar = _Calendar_;
Calendar.clear();
moment.locale('en-gb');
}));