Moment: Momen Tidak Berhasil Dengan Jest

Dibuat pada 16 Jul 2019  ·  9Komentar  ·  Sumber: moment/moment

Jelaskan bugnya
Ketika diimpor ke pengaturan pengembangan import moment from 'moment' memungkinkan momen untuk bekerja secara efektif dan melakukan semua yang saya inginkan. Namun ketika menjalankan tes lelucon yang menjalankan kode yang memanggil momen () saya mendapatkan kesalahan berikut:
"TypeError: moment_1.default bukan fungsi"
Anehnya, Mengimpornya dengan cara ini: import * as moment from 'moment' memungkinkan fungsionalitas dalam pengujian tetapi tidak dalam produksi. Saya telah memeriksa semua masalah lelucon dan ini telah menjadi masalah yang dilaporkan namun tim Jest yakin masalahnya ada di pihak saat ini.

Untuk Mereproduksi
Langkah-langkah untuk mereproduksi perilaku:

  1. buat fungsi sederhana di aplikasi react yang memanggil moment ()
  2. tambahkan tes lelucon yang akan melintasi jalur ini.
  3. jalankan tes.
  4. Lihat kesalahan

Perilaku yang diharapkan
Momen harus dapat dipanggil dalam pengujian dan produksi dengan cara yang sama.

Desktop (lengkapi informasi berikut):

  • OS: macOS Mojave
  • Pengujian: Jest -v 24.8.0

Lingkungan khusus momen
saat -v 2.24.0

  • Pustaka lain yang digunakan: TypeScript

Harap jalankan kode berikut di lingkungan Anda dan sertakan hasilnya:
keluaran konsol ketika momen diimpor dengan cara yang diharapkan oleh pengembangan yaitu momen impor dari 'momen'

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.

keluaran konsol saat momen diimpor dengan cara berfungsi dalam pengujian yaitu impor * sebagai momen dari 'momen'

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

Komentar yang paling membantu

const moment = require("moment").default || require("moment") adalah yang saya buat, tetapi ini hanya memungkinkan penggunaan untuk menggunakan moment sebagai fungsi.
// edit

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

Memperbaiki masalah sudut / lelucon. Tapi itu masih hack.

Semua 9 komentar

const moment = require("moment").default || require("moment") adalah yang saya buat, tetapi ini hanya memungkinkan penggunaan untuk menggunakan moment sebagai fungsi.
// edit

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

Memperbaiki masalah sudut / lelucon. Tapi itu masih hack.

cela. Tapi itu masih hack.

Terima kasih Pak, itu membantu.

Apakah ada sesuatu yang bisa dilakukan pihak Moment.js di sini?

Saya menghadapi masalah ini ketika saya menggunakan ts-jest untuk bekerja dengan skrip dan lelucon. Saya akhirnya menggunakan babel untuk dukungan skrip dengan lelucon sebagai gantinya dan saya tidak menghadapinya lagi. Mungkin perpustakaan ts-jest mungkin melakukan sesuatu secara tersembunyi

setelah beberapa pencarian lagi menemukan solusinya di sini
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406

harus memasukkan "esModuleInterop": true bawah compilerOptions di tsconfig.json

@DhrubajitPC senang Anda menemukan solusinya.
Bisakah Anda menambahkannya ke dokumen kami?
https://momentjs.com/docs/#/use -it / typescript /

Tentu ... beri aku waktu :)

hmmm ... sepertinya sudah menjadi bagian dari FAQ
https://github.com/moment/moment/blob/develop/FAQ.md

Sepertinya saya hanya mendapatkan kesalahan ini ketika saya menyetel esModuleInterop ke true ...
@KonradLinkowski - peretasan membantu :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat