Moment: Moment ne fonctionne pas avec Jest

Créé le 16 juil. 2019  ·  9Commentaires  ·  Source: moment/moment

Décrivez le bogue
Lorsqu'il est importé dans un paramètre de développement, import moment from 'moment' permet au moment de fonctionner efficacement et fait tout ce que je veux. Cependant, lors de l'exécution de tests de plaisanterie qui exécutent le code qui appelle moment (), j'obtiens l'erreur suivante:
"TypeError: moment_1.default n'est pas une fonction"
Étrangement, l'importer de cette manière: import * as moment from 'moment' permet des fonctionnalités en test mais pas en production. J'ai parcouru les problèmes de plaisanterie et cela a été un problème signalé, mais l'équipe de Jest est convaincue que le problème est du côté du moment.

Reproduire
Étapes pour reproduire le comportement:

  1. créer une fonction simple dans une application de réaction qui appelle moment ()
  2. ajoutez un test de plaisanterie qui traversera ce chemin.
  3. lancez le test.
  4. Voir l'erreur

Comportement attendu
Moment doit pouvoir être appelé à la fois en test et en production de la même manière.

Bureau (veuillez compléter les informations suivantes):

  • Système d'exploitation: macOS Mojave
  • Test: Jest -v 24.8.0

Environnement spécifique au moment
moment -v 2.24.0

  • Autres bibliothèques utilisées: TypeScript

Veuillez exécuter le code suivant dans votre environnement et inclure la sortie:
sortie de la console lorsque le moment est importé de la manière attendue par le développement, c'est-à-dire importer le moment à partir du moment

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.

sortie de la console lorsque le moment est importé la façon dont il fonctionne dans le test, c'est-à-dire importer * en tant que moment à partir du moment

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

Commentaire le plus utile

const moment = require("moment").default || require("moment") est ce que j'ai trouvé, mais cela permet seulement d'utiliser moment comme fonction.
// Éditer

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

Corrige le problème angulaire / plaisanterie. Mais c'est toujours un hack.

Tous les 9 commentaires

const moment = require("moment").default || require("moment") est ce que j'ai trouvé, mais cela permet seulement d'utiliser moment comme fonction.
// Éditer

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

Corrige le problème angulaire / plaisanterie. Mais c'est toujours un hack.

blem. Mais c'est toujours un hack.

Merci monsieur, cela a aidé.

Y a-t-il quelque chose que l'équipe Moment.js peut faire ici?

J'étais confronté à ce problème lorsque j'utilisais ts-jest pour travailler avec dactylographié et jest. J'ai fini par utiliser babel pour le support dactylographié avec jest à la place et je n'y suis plus confronté. Peut-être que la bibliothèque ts-jest fait quelque chose sous le capot

après quelques recherches supplémentaires, j'ai trouvé la solution ici
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406

besoin de passer "esModuleInterop": true sous compilerOptions dans tsconfig.json

@DhrubajitPC heureux que vous ayez trouvé la solution.
Pouvez-vous ajouter cela à nos documents?
https://momentjs.com/docs/#/use -it / typescript /

Bien sûr ... donnez-moi un peu de temps :)

hmmm ... cela semble déjà faire partie de la FAQ
https://github.com/moment/moment/blob/develop/FAQ.md

Il semble que je n'obtiens cette erreur que lorsque je règle esModuleInterop sur true ...
@KonradLinkowski - le hack a aidé :)

Cette page vous a été utile?
0 / 5 - 0 notes