Ошибка броска машинописного текста во время модульных тестов, эта переменная не определена, даже если я объявил оператор var в начале файла

Я использую angular(2) и машинопись. Я использую библиотеку момента для преобразования дат, поэтому у меня есть эта функция внутри одного из моих служебных классов:

static isoStringToDateObj(isoDateString: string): Date {
    // For unit tests and any environment where moment library is not present
    if (!moment) {
        return new Date(isoDateString);
    }
    return moment(isoDateString).toDate();
}

Это прекрасно работает в браузере, но когда я пытаюсь запустить свои модульные тесты, он выдает ошибку: ReferenceError: Не удается найти переменную: moment в karma-test-shim.js (строка 16240)

Строка, на которую он ссылается, является if (!moment) линия.

  1. Почему это важно, если переменная не существует в операторе, который проверяет только, существует ли переменная? Он не ссылается ни на какие свойства.
  2. я имею declare var moment: any; вверху файла, в котором находится функция isoStringToDateObj, так почему он говорит об ошибке ссылки, когда переменная фактически объявлена?

1 ответ

Решение

Единственный правильный способ проверить, не существует ли глобальная переменная:

if (typeof moment === 'undefined') { ... }

ReferenceError: Невозможно найти переменную: moment

ошибка во время выполнения, declare var moment: any система ввода читов, чтобы молчать об этом, но не может повлиять на фактическую moment глобальный в любом случае.

Другие вопросы по тегам