أسهل طريقة دون تثبيت حزمة NPM إضافية

أسهل طريقة دون تثبيت حزمة NPM إضافية

عند كتابة اختبارات الوحدة لرمز JavaScript الخاص بك ، خاصة عندما يتعلق الأمر بالوظائف المعتمدة على الوقت ، من الأهمية بمكان التحكم في سلوك الأم والسخرية Date هدف. هذا يضمن أن اختباراتك حتمية وتحقيق نتائج متسقة بغض النظر عن الوقت الحالي. في هذا الدليل سوف تتعلم أسهل طريقة للسخرية Date في نكتة دون تثبيت حزم NPM إضافية. يستخدم هذا النهج وظائف السخرية المتكاملة للمزاح مع أجهزة ضبط الوقت المزيفة وتحديد تاريخ النظام ، بحيث يكون من السهل والكفاءة التحكم في الوقت في الاختبارات. لنبدأ!

هذه هي الطريقة التي تسخر بها من التاريخ في الصدمة: أسهل طريقة دون تثبيت حزمة NPM إضافية

جدول المحتويات #

اختبار وظائف التاريخ الأصلي ليست سهلة #

رمز الاختبار الذي يتفاعل مع الأم Date يمكن أن يكون الكائن تحديًا لأن Date الكائن ديناميكي بشكل طبيعي. تتغير قيمتها مع كل ميلي ثانية مؤقتة ، مما يجعل من الصعب كتابة اختبارات حتمية. تخيل أن لديك وظيفة تُظهر يوم العام. إذا قمت بهذه الوظيفة اليوم (في 26 سبتمبر) ، فسيتم عرض 270 (من 365) ، ولكن إذا قمت بتشغيلها غدًا ، فسيتم عرضك 271 (من 365). هذا يعني أن الاختبار لا يمكن تكراره ، ما لم يتم الاستهزاء بتاريخ النظام وتعيينه إلى تاريخ محدد.

أيضا السكان الأصليين Date الكائن هو كائن عالمي في JavaScript ، مما يعني أن التغييرات التي تم إجراؤها في الاختبار قد تؤثر على اختبارات أخرى ، مما يؤدي إلى نتائج غير متوقعة وغير متسقة. هذا يمكن أن يجعل تصحيح الأخطاء واستكشاف الأخطاء وإصلاحها صعبة للغاية. كيف يمكننا حل هذه المشكلة ، ودخول أجهزة ضبط الوقت المزيفة وضبط تاريخ النظام في نكتة 26+ ، والتي تمت مناقشتها بعد ذلك.

تاريخ الاستهزاء مع النكتة 26 #

النكتة هي إطار اختبار جافا سكريبت الأكثر شعبية. إنه يوفر وظيفة سخرية قوية Date اعتراض في اختباراتهم. مع النكتة 26 (المنشورة في مايو 2020) والإصدارات اللاحقة يمكنك السخرية منها مباشرة Date كائن دون الاعتماد على المكتبات الخارجية أو المشاكل المعقدة. هذا النهج بسيط وفعال ويضمن أن اختباراتك حتمية وتحقيق نتائج متسقة.

مثال # يوم العام

لتوضيح كيف يمكنك مزاح كائن التاريخ ، نستخدم مثالًا. أنها تنشئ وظيفة بسيطة ولكنها مفيدة تُرجع يوم العام. لذلك إذا قمت بتشغيله على 1 يناير ، فسيتم إرجاع 1. إذا قمت بذلك حتى 20 ديسمبر ، فسيتم إرجاع 354 (بدون سنة قفزة في الوقت الحالي). ببساطة بما فيه الكفاية؟ قد تفكر في كيفية استخدام طلب هذا العام لهذا العام – يمكن استخدام اليوم بطرق مختلفة ، مثل بطاقة السعر التالية التي تلقيتها من خلال البحث عن “أسهم Nvidia”:

سنة حتى الآن (YTD) المستخدمة في مخطط شركة الأسهم لـ Nvidia

يحتوي على خيار YTD الذي يوضح السعر 2-JAN حتى يومنا هذا. يتم تحديثه كل يوم. لذا فإن مهمتك هي الحصول على عدد اليوم في السنة.

للقيام بهذه المهمة ، استخدم JavaScript (node.js) ويمكن أن يبدو الرمز في ملف يسمى dateHelper.js:

export function getDayOfYear() {
const today = new Date();
const todayInMs = Date.UTC(today.getFullYear(), today.getMonth(), today.getDate());
const startOfYearInMs = Date.UTC(today.getFullYear(), 0, 0);
const diffInMs = todayInMs - startOfYearInMs;

const msInOneMinute = 1000 * 60;
const msInOneHour = msInOneMinute * 60;
const msInOneDay = msInOneHour * 24;

return diffInMs / msInOneDay;
}

إنه يبحث لفترة طويلة ، لكن لا شيء يحدث في الكود أعلاه ، كان في الأصل عبارة عن سعة مكدس -liner.

أولاً ، ستتلقى تاريخ نظام اليوم new Date()ثم قم بتحويل تاريخ اليوم إلى ميلي ثانية. وبالمثل ، يقومون بتحويل بداية العام إلى ميلي ثانية. ثم قم بطرح هذين الاثنين عن طريق تقديم تاريخ اليوم بالميلي ثانية – في بداية العام بالميلي ثانية. ثم قم بتحويل الفرق الموجود بالميلي ثانية وقسمه 1000 * 60 * 60 * 24ما تم عرضه في 3 أسطر لجعله أكثر وضوحًا. هذا يمنحك ، على سبيل المثال ، رقم 270 إذا قمت بتشغيل الرمز أعلاه في 26 سبتمبر.

إذا قمت بتشغيل هذا الرمز مع:

import { getDayOfYear } from './src/dateHelper.js';

console.log(`Today is day ${getDayOfYear()} / 365 days of this year ${new Date().getFullYear()}.`);

سوف تصدر:

Today is day 270 / 365 days of this year 2024.

تم تنفيذ الرمز أعلاه إلى 26 سبتمبر. بعد ذلك تكتب اختبارات قابلة للتكرار لما سبق getDayOfYear الوظيفة التي لن تحدث اليوم فحسب ، بل في يوم من أيام العام.

اختبار مثال العام على سبيل المثال #

من أجل كتابة اختبار وحدة للرمز أعلاه مع النكتة ، فهو غير معقد. المشكلة هي إذا قمت بإجراء الاختبار غدًا (27 سبتمبر) أن مطالبتك في اليوم 270 من العام تفشل. يتغير التاريخ كل يوم حتى تتمكن من كتابة اختبار مثل يوم العام أكبر من 0 وأقل من 365 ، ولكن هذا الاختبار عديم الفائدة.

فيما يلي القدرة على السخرية من التاريخ أو القول بأنه موعد معين ، عملي للغاية. لهذا الغرض ، يمكنك استخدام رمز الاختبار التالي لاختبارات الوحدة:

import { getDayOfYear } from '../src/dateHelper.js';

describe('dateHelper - Jest 26+', () => {
describe('getDayOfYear', () => {
beforeEach(() => {
jest.useFakeTimers();
jest.setSystemTime(new Date('2024-01-07'));
});
afterEach(() => {
jest.setSystemTime(jest.getRealSystemTime());
jest.useRealTimers();
});

it('should return 7 for 7-Jan as set with fake timers and system date', () => {
const result = getDayOfYear();
expect(result).toBe(7);
});
});
});

تنفيذ ملف الاختبار هذا في test مجلد اسمه dateHelper.test.jsال dateHelper.js الملف في src مجلد.

أول استيراد getDayOfYear الوظيفة من الوحدة النمطية ، نعم ، هذا هو استيراد ES6 (لا يتطلب JS العادي). ثم اكتب رمز الاختبار ، النقطة الرئيسية هنا هي في نكتة قبل أن تبدأ/تسخر من التاريخ 7-Jan-2024. لهذا الغرض ، استخدم نكتة facetimers. مع هذه الموقتات الموقت ، يمكن أن تحل النكتة محل أجهزة ضبط الوقت بوظائف يمكنك التحكم بها في الوقت. ثم اضبط وقت النظام ليكون 7-Jan-2024. هذا هو بالضبط ما تحتاجه بحيث تكون اختباراتك قابلة للتكرار وموثوقة.

في اتباع هذه الاختبارات ، قم بتعيين وقت النظام مرة أخرى إلى الوقت الفعلي وأيضًا استخدام أجهزة ضبط الوقت الحقيقية للاختبارات الأخرى في الخارج ، وصف الكتلة. أنت بالتأكيد لا تريد وصف الاختبارات الأخرى خارج الكتلة ، وحتى ملف الاختبار هذا.

إذا قمت بإجراء الاختبار أعلاه ، فسيتم عرض الإصدار التالي:

نتائج اختبار الاختبار لتاريخ الصدمة

أنت الآن تقودها اليوم ، غدًا أو في يوم من اليوم ، سيظل قد تم تمريره. لماذا؟ لأنه بالنسبة لهذا الاختبار ، يتم تعيين تاريخ النظام دائمًا 7-Jan-2024 منذ أن سخر من التاريخ مع أجهزة ضبط الوقت المزيفة وكان تاريخ النظام نكتة للسخرية من التاريخ الحقيقي.

ستجد الكود الكامل في مستودع GitHub هذا كمرجع.

خيارات أخرى لسخر التاريخ في النكتة #

هناك خيارات أخرى للمزاح في التاريخ. إذا كنت تستخدم نسخة مزحة من أقل من 26 ، فيمكنك السخرية مع نكتة Spyon عبر كائن التاريخ العالمي. إنه ليس من السهل أو الكود نظيف ، ولكن هذه طريقة للقيام بذلك. أن نكون صادقين ، يجب عليك استخدام Joke 26+ ، حيث تم نشر الإصدار 26 في مايو 2020 منذ أكثر من 4 سنوات

يمكنك أيضًا استخدام حزمة NPM لتاريخ الصدمة. في وقت كتابة هذا التقرير ، يحتوي هذا على 270k+ تنزيل في الأسبوع. ولكن إذا تمكنت من القيام بذلك بنكتة وتاريخ توقيت مزيف/تعيين نظام ، أعتقد أن Opton أفضل بكثير.

دبلوم #

في هذا الدليل ، تعلمت أبسط طريقة وأكثرها كفاءة للسخرية منه Date كائن في نكتة دون تثبيت حزم NPM إضافية. يستخدم هذا النهج وظائف النكتة المتكاملة للمزاح ، ويجعل ببساطة التحكم في التاريخ/الوقت في الاختبارات الخاصة بك مع أجهزة ضبط الوقت المزيفة وتحديد تاريخ النظام. لقد رأيت أيضًا مثالًا عمليًا للاستخدام Date fotting لكتابة الاختبارات الحتمية للرمز المعتمد على التاريخ.

المضي قدما ، عناق النكات Date موسيقى الروك ولعبة الاختبار الخاصة بك إلى المستوى التالي!

المصدر المرجعي

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *