Descreva o bug
Quando importado para uma configuração de desenvolvimento, import moment from 'moment'
permite que o momento funcione de maneira eficaz e faça tudo o que eu quero. No entanto, ao executar testes de jest que são executados no código que chama moment (), recebo o seguinte erro:
"TypeError: moment_1.default não é uma função"
Estranhamente, importá-lo desta forma: import * as moment from 'moment'
permite funcionalidade em teste, mas não em produção. Eu examinei todos os problemas de Jest e este foi um problema relatado, no entanto, a equipe de Jest está confiante de que o problema está do lado do momento.
Reproduzir
Passos para reproduzir o comportamento:
Comportamento esperado
O momento deve ser chamado tanto no teste quanto na produção da mesma maneira.
Desktop (preencha as seguintes informações):
Ambiente específico do momento
momento -v 2.24.0
Execute o seguinte código em seu ambiente e inclua a saída:
saída do console quando o momento é importado da maneira que o desenvolvimento espera, ou seja, importe o momento do '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.
saída do console quando o momento é importado da maneira que funciona no teste, ou seja, importar * como momento a partir de '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")
é o que eu inventei, mas ele só permite o uso de moment
como uma função.
// editar
import * as mom from "moment";
const moment = require("moment").default || require("moment");
Corrige o problema angular / jest. Mas ainda é um hack.
mancha. Mas ainda é um hack.
Obrigado senhor, isso ajudou.
Existe algo que o lado Moment.js pode fazer aqui?
Eu estava enfrentando esse problema quando estava usando ts-jest
para trabalhar com texto datilografado e jest. Acabei usando o babel para suporte à digitação com jest e não o enfrento mais. Talvez a biblioteca ts-jest
esteja fazendo algo nos bastidores
depois de mais algumas pesquisas encontrei a solução aqui
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406
precisa passar "esModuleInterop": true
sob compilerOptions em tsconfig.json
@DhrubajitPC que bom que você encontrou a solução.
Você pode adicionar isso aos nossos documentos?
https://momentjs.com/docs/#/use -it / typescript /
Claro ... me dê um tempo :)
hmmm ... já parece fazer parte do FAQ
https://github.com/moment/moment/blob/develop/FAQ.md
Parece que só recebo este erro quando defino esModuleInterop como verdadeiro ...
@KonradLinkowski - o hack ajudou embora :)
Comentários muito úteis
const moment = require("moment").default || require("moment")
é o que eu inventei, mas ele só permite o uso demoment
como uma função.// editar
Corrige o problema angular / jest. Mas ainda é um hack.