وصف الخطأ
عند الاستيراد إلى أحد إعدادات التطوير ، فإن import moment from 'moment'
يسمح للحظة بالعمل بفعالية ويفعل كل ما أريده. ومع ذلك ، عند إجراء اختبارات الدعابة التي يتم تشغيلها عبر الكود الذي يستدعي اللحظة () ، أحصل على الخطأ التالي:
"TypeError: moment_1.default ليس دالة"
الغريب أن استيراده بهذه الطريقة: import * as moment from 'moment'
يسمح بالوظائف في الاختبار ولكن ليس في الإنتاج. لقد بحثت في جميع مشكلات الدعابة وكانت هذه مشكلة تم الإبلاغ عنها ولكن فريق Jest واثق من أن المشكلة في الوقت الحالي.
لإعادة إنتاج
خطوات إعادة إنتاج السلوك:
سلوك متوقع
يجب أن تكون اللحظة قابلة للاستدعاء في كل من الاختبار والإنتاج بنفس الطريقة.
سطح المكتب (يرجى استكمال المعلومات التالية):
بيئة خاصة باللحظة
لحظة -v 2.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 هنا؟
كنت أواجه هذه المشكلة عندما كنت أستخدم ts-jest
للعمل مع الحروف المطبوعة ومازح. انتهى بي الأمر باستخدام babel للحصول على دعم مكتوب باستخدام الدعابة بدلاً من ذلك ولم أعد أواجهه بعد الآن. ربما تقوم مكتبة ts-jest
بعمل شيء ما تحت الغطاء
بعد المزيد من البحث وجدت الحل هنا
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406
تحتاج إلى تمرير "esModuleInterop": true
تحت compilerOptions في tsconfig.json
DhrubajitPC سعيد لأنك وجدت الحل.
هل يمكنك إضافة ذلك إلى مستنداتنا؟
https://momentjs.com/docs/#/use -it / typescript /
بالتأكيد ... أعطني بعض الوقت :)
هممم ... يبدو بالفعل أنه جزء من الأسئلة الشائعة
https://github.com/moment/moment/blob/develop/FAQ.md
يبدو أنني لم أحصل على هذا الخطأ إلا عندما أضبط esModuleInterop على true ...
KonradLinkowski - ساعد الاختراق على الرغم من ذلك :)
التعليق الأكثر فائدة
const moment = require("moment").default || require("moment")
هو ما توصلت إليه ، لكنه يسمح فقط باستخدامmoment
كدالة.// تعديل
يصلح مشكلة الزاوية / الدعابة. لكنها لا تزال اختراقًا.