Moment: O momento não funciona com o Jest

Criado em 16 jul. 2019  ·  9Comentários  ·  Fonte: moment/moment

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:

  1. faça uma função simples em um aplicativo de reação que chama moment ()
  2. adicione um teste de brincadeira que irá percorrer este caminho.
  3. execute o teste.
  4. Ver erro

Comportamento esperado
O momento deve ser chamado tanto no teste quanto na produção da mesma maneira.

Desktop (preencha as seguintes informações):

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

Ambiente específico do momento
momento -v 2.24.0

  • Outras bibliotecas em uso: TypeScript

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

Comentários muito úteis

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.

Todos 9 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações