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:
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):
Environnement spécifique au moment
moment -v 2.24.0
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
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é :)
Commentaire le plus utile
const moment = require("moment").default || require("moment")
est ce que j'ai trouvé, mais cela permet seulement d'utilisermoment
comme fonction.// Éditer
Corrige le problème angulaire / plaisanterie. Mais c'est toujours un hack.