Moment: لحظة لا تعمل مع Jest

تم إنشاؤها على ١٦ يوليو ٢٠١٩  ·  9تعليقات  ·  مصدر: moment/moment

وصف الخطأ
عند الاستيراد إلى أحد إعدادات التطوير ، فإن import moment from 'moment' يسمح للحظة بالعمل بفعالية ويفعل كل ما أريده. ومع ذلك ، عند إجراء اختبارات الدعابة التي يتم تشغيلها عبر الكود الذي يستدعي اللحظة () ، أحصل على الخطأ التالي:
"TypeError: moment_1.default ليس دالة"
الغريب أن استيراده بهذه الطريقة: import * as moment from 'moment' يسمح بالوظائف في الاختبار ولكن ليس في الإنتاج. لقد بحثت في جميع مشكلات الدعابة وكانت هذه مشكلة تم الإبلاغ عنها ولكن فريق Jest واثق من أن المشكلة في الوقت الحالي.

لإعادة إنتاج
خطوات إعادة إنتاج السلوك:

  1. أنشئ وظيفة بسيطة في تطبيق رد فعل يستدعي اللحظة ()
  2. أضف اختبار الدعابة الذي سيتجاوز هذا المسار.
  3. قم بإجراء الاختبار.
  4. انظر الخطأ

سلوك متوقع
يجب أن تكون اللحظة قابلة للاستدعاء في كل من الاختبار والإنتاج بنفس الطريقة.

سطح المكتب (يرجى استكمال المعلومات التالية):

  • نظام التشغيل: macOS Mojave
  • الاختبار: Jest -v 24.8.0

بيئة خاصة باللحظة
لحظة -v 2.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 هنا؟

كنت أواجه هذه المشكلة عندما كنت أستخدم 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 - ساعد الاختراق على الرغم من ذلك :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات