Ошибка броска машинописного текста во время модульных тестов, эта переменная не определена, даже если я объявил оператор 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)
линия.
- Почему это важно, если переменная не существует в операторе, который проверяет только, существует ли переменная? Он не ссылается ни на какие свойства.
- я имею
declare var moment: any;
вверху файла, в котором находится функция isoStringToDateObj, так почему он говорит об ошибке ссылки, когда переменная фактически объявлена?
1 ответ
Решение
Единственный правильный способ проверить, не существует ли глобальная переменная:
if (typeof moment === 'undefined') { ... }
ReferenceError: Невозможно найти переменную: moment
ошибка во время выполнения, declare var moment: any
система ввода читов, чтобы молчать об этом, но не может повлиять на фактическую moment
глобальный в любом случае.