Moment: モーメントはJestでは機能しません

作成日 2019年07月16日  ·  9コメント  ·  ソース: moment/moment

バグを説明する
import moment from 'moment'開発設定にインポートすると、瞬間が効果的に機能し、必要なすべてのことを実行できます。 ただし、moment()を呼び出すコードに対して実行されるjestテストを実行すると、次のエラーが発生します。
「TypeError:moment_1.defaultは関数ではありません」
不思議なことに、次の方法でインポートします。 import * as moment from 'moment'は、テストでは機能を許可しますが、本番では機能しません。 私はjestの問題をすべて調べましたが、これは報告された問題ですが、Jestチームは問題が瞬間的なものであると確信しています。

再現するには
動作を再現する手順:

  1. moment()を呼び出すreactアプリで簡単な関数を作成します
  2. このパスをトラバースするjestテストを追加します。
  3. テストを実行します。
  4. エラーを参照してください

期待される動作
モーメントは、テストと本番の両方で同じ方法で呼び出すことができる必要があります。

デスクトップ(次の情報を入力してください):

  • OS:macOS Mojave
  • テスト:Jest -v 24.8.0

モーメント固有の環境
モーメント-v2.24.0

  • 使用中の他のライブラリ:TypeScript

ご使用の環境で次のコードを実行し、出力を含めてください。
モーメントがインポートされたときのコンソール出力は、開発が期待する方法、つまり「モーメント」からモーメントをインポートします。

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.

モーメントがテストで機能する方法でインポートされたときのコンソール出力、つまり「モーメント」からのモーメントとしてインポート*

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

最も参考になるコメント

const moment = require("moment").default || require("moment")は私が思いついたものですが、関数として使用できるのはmomentのみです。
//編集

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

角度/冗談の問題を修正します。 しかし、それはまだハックです。

全てのコメント9件

const moment = require("moment").default || require("moment")は私が思いついたものですが、関数として使用できるのはmomentのみです。
//編集

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

角度/冗談の問題を修正します。 しかし、それはまだハックです。

傷。 しかし、それはまだハックです。

ありがとうございます、それは助けになりました。

Moment.js側がここでできることはありますか?

typescriptとjestの操作にts-jestを使用していたときに、この問題に直面していました。 代わりにjestを使用したtypescriptサポートにbabelを使用することになり、もう直面していません。 おそらく、 ts-jestライブラリが内部で何かをしている可能性があります

さらに検索した後、ここで解決策が見つかりました
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406

tsconfig.jsonのcompilerOptionsの下に"esModuleInterop": trueを渡す必要があります

@DhrubajitPCあなたが解決策を見つけてくれてうれしいです。
それをドキュメントに追加できますか?
https://momentjs.com/docs/#/use -it / typescript /

確かに...しばらくお待ちください:)

うーん...それはすでにFAQの一部のようです
https://github.com/moment/moment/blob/develop/FAQ.md

esModuleInteropをtrueに設定した場合にのみこのエラーが発生するようです...
@ KonradLinkowski-ハックは助けになりました:)

このページは役に立ちましたか?
0 / 5 - 0 評価