Moment: El momento no funciona con Jest

Creado en 16 jul. 2019  ·  9Comentarios  ·  Fuente: moment/moment

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:

  1. hacer una función simple en una aplicación de reacción que llame a moment ()
  2. agregue una prueba de broma que atravesará este camino.
  3. ejecutar la prueba.
  4. Ver error

Comportamiento esperado
El momento debe ser invocable tanto en prueba como en producción de la misma manera.

Escritorio (complete la siguiente información):

  • SO: macOS Mojave
  • Prueba: Jest -v 24.8.0

Entorno específico del momento
momento -v 2.24.0

  • Otras bibliotecas en uso: TypeScript

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
Documentation Help Wanted

Comentario más útil

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.

Todos 9 comentarios

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ó :)

¿Fue útil esta página
0 / 5 - 0 calificaciones