Moment: Момент не работает со шуткой

Созданный на 16 июл. 2019  ·  9Комментарии  ·  Источник: moment/moment

Опишите ошибку
При импортировании в настройку разработки import moment from 'moment' позволяет моменту работать эффективно и делать все, что я хочу. Однако при запуске тестов jest, которые запускают код, вызывающий момент (), я получаю следующую ошибку:
«TypeError: moment_1.default не является функцией»
Как ни странно, импорт таким образом: import * as moment from 'moment' разрешает функциональность в тестовой, но не в рабочей среде. Я просмотрел все проблемы Jest, и об этом сообщалось, однако команда Jest уверена, что проблема актуальна.

Воспроизводить
Шаги по воспроизведению поведения:

  1. сделать простую функцию в приложении для реагирования, которое вызывает момент ()
  2. добавьте тест-шутку, который будет проходить этот путь.
  3. запустить тест.
  4. Увидеть ошибку

Ожидаемое поведение
Момент должен вызываться как в тестовой, так и в производственной среде одинаково.

Рабочий стол (заполните следующую информацию):

  • ОС: macOS Mojave
  • Тестирование: Jest -v 24.8.0

Специфическая среда
момент -v 2.24.0

  • Другие используемые библиотеки: TypeScript

Пожалуйста, запустите следующий код в своей среде и включите вывод:
вывод на консоль, когда момент импортируется так, как ожидает разработка, т.е. импортный момент из момента

console.log src/resources/timestamping.tsx:4
      Tue Jul 16 2019 10:58:16 GMT-0400 (Eastern Daylight Time)
    console.log src/resources/timestamping.tsx:5
      7/16/2019, 10:58:16 AM
    console.log src/resources/timestamping.tsx:6
      240
TypeError: Cannot read property 'version' of undefined.

вывод в консоль при импорте момента, как он работает в тесте, т.е. импорт * как момент с момента

console.log src/resources/timestamping.tsx:4
      Tue Jul 16 2019 11:02:46 GMT-0400 (Eastern Daylight Time)
    console.log src/resources/timestamping.tsx:5
      7/16/2019, 11:02:46 AM
    console.log src/resources/timestamping.tsx:6
      240
    console.log src/resources/timestamping.tsx:8
      2.24.0
Documentation Help Wanted

Самый полезный комментарий

const moment = require("moment").default || require("moment") - это то, что я придумал, но он позволяет использовать только moment как функцию.
// редактировать

import * as mom from "moment";
const moment = require("moment").default || require("moment");

Исправляет угловую / шутливую проблему. Но это все же взлом.

Все 9 Комментарий

const moment = require("moment").default || require("moment") - это то, что я придумал, но он позволяет использовать только moment как функцию.
// редактировать

import * as mom from "moment";
const moment = require("moment").default || require("moment");

Исправляет угловую / шутливую проблему. Но это все же взлом.

порок. Но это все же взлом.

Спасибо, сэр, это помогло.

Может ли здесь что-нибудь сделать Moment.js?

Я столкнулся с этой проблемой, когда использовал ts-jest для работы с машинописным текстом и jest. В итоге я использовал babel для поддержки машинописного текста с помощью jest, и я больше с этим не сталкиваюсь. Возможно, библиотека ts-jest может что-то делать под капотом

после еще нескольких поисков нашел решение здесь
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406

нужно передать "esModuleInterop": true под compilerOptions в tsconfig.json

@DhrubajitPC рад, что вы нашли решение.
Вы можете добавить это в нашу документацию?
https://momentjs.com/docs/#/use -it / typescript /

Конечно ... дай мне немного времени :)

хммм ... вроде уже есть часть FAQ
https://github.com/moment/moment/blob/develop/FAQ.md

Кажется, я получаю эту ошибку только тогда, когда устанавливаю для esModuleInterop значение true ...
@KonradLinkowski - хак хоть и помог :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги