Describe el error
Cuando se importa a una configuración de desarrollo, import moment from 'moment'
permite que el momento funcione de manera efectiva y hace todo lo que quiero. Sin embargo, cuando ejecuto pruebas de broma que se ejecutan sobre el código que llama a moment (), aparece el siguiente error:
"TypeError: moment_1.default no es una función"
Curiosamente, importarlo de esta manera: import * as moment from 'moment'
permite la funcionalidad en prueba pero no en producción. He revisado todos los problemas de Jest y este ha sido un problema informado, sin embargo, el equipo de Jest está seguro de que el problema está del lado del momento.
Reproducir
Pasos para reproducir el comportamiento:
Comportamiento esperado
El momento debe ser invocable tanto en prueba como en producción de la misma manera.
Escritorio (complete la siguiente información):
Entorno específico del momento
momento -v 2.24.0
Ejecute el siguiente código en su entorno e incluya el resultado:
salida de la consola cuando el momento se importa de la forma en que el desarrollo espera, es decir, importar el momento desde el 'momento'
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.
salida de la consola cuando el momento se importa la forma en que funciona en la prueba, es decir, importar * como momento desde 'momento'
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
const moment = require("moment").default || require("moment")
es lo que se me ocurrió, pero solo permite usar moment
como función.
// editar
import * as mom from "moment";
const moment = require("moment").default || require("moment");
Soluciona el problema de ángulo / broma. Pero sigue siendo un truco.
mancha. Pero sigue siendo un truco.
Gracias señor, eso ayudó.
¿Hay algo que pueda hacer el lado de Moment.js aquí?
Me enfrentaba a este problema cuando estaba usando ts-jest
para trabajar con mecanografiado y broma. Terminé usando babel para soporte mecanografiado con jest en su lugar y ya no lo afronto. Quizás la biblioteca ts-jest
esté haciendo algo bajo el capó
Después de buscar más, encontré la solución aquí.
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406
necesita pasar "esModuleInterop": true
bajo compilerOptions en tsconfig.json
@DhrubajitPC me alegro de que haya encontrado la solución.
¿Puedes agregar eso a nuestros documentos?
https://momentjs.com/docs/#/use -it / typescript /
Claro ... dame algo de tiempo :)
hmmm ... ya parece ser parte de las preguntas frecuentes
https://github.com/moment/moment/blob/develop/FAQ.md
Parece que solo obtengo este error cuando configuro esModuleInterop en verdadero ...
@KonradLinkowski - aunque el truco ayudó :)
Comentario más útil
const moment = require("moment").default || require("moment")
es lo que se me ocurrió, pero solo permite usarmoment
como función.// editar
Soluciona el problema de ángulo / broma. Pero sigue siendo un truco.