momentjs возвращает другой результат в браузере, чем в модульном тестировании karma

#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/week

5. ru в браузере и в модульном тестировании

Ответ №1:

Проблема заключалась в том, что мое приложение использовало en-us, а модульные тесты использовали en-gb. Мне пришлось явно установить локаль в moment в модульных тестах.

 beforeEach(inject(function (_Calendar_) {
    Calendar = _Calendar_;
    Calendar.clear();
    moment.locale('en-gb');
}));