バグを説明する
import moment from 'moment'
開発設定にインポートすると、瞬間が効果的に機能し、必要なすべてのことを実行できます。 ただし、moment()を呼び出すコードに対して実行されるjestテストを実行すると、次のエラーが発生します。
「TypeError:moment_1.defaultは関数ではありません」
不思議なことに、次の方法でインポートします。 import * as moment from 'moment'
は、テストでは機能を許可しますが、本番では機能しません。 私はjestの問題をすべて調べましたが、これは報告された問題ですが、Jestチームは問題が瞬間的なものであると確信しています。
再現するには
動作を再現する手順:
期待される動作
モーメントは、テストと本番の両方で同じ方法で呼び出すことができる必要があります。
デスクトップ(次の情報を入力してください):
モーメント固有の環境
モーメント-v2.24.0
ご使用の環境で次のコードを実行し、出力を含めてください。
モーメントがインポートされたときのコンソール出力は、開発が期待する方法、つまり「モーメント」からモーメントをインポートします。
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
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-ハックは助けになりました:)
最も参考になるコメント
const moment = require("moment").default || require("moment")
は私が思いついたものですが、関数として使用できるのはmoment
のみです。//編集
角度/冗談の問題を修正します。 しかし、それはまだハックです。