Jest: إخفاء تسجيل وحدة التحكم لاجتياز الاختبارات وإظهار الفشل

تم إنشاؤها على ٢٨ يوليو ٢٠١٧  ·  47تعليقات  ·  مصدر: facebook/jest


هل تريد طلب ميزة أو الإبلاغ عن خطأ ؟

خاصية

ما هو السلوك الحالي؟

عند تشغيل jest --watch سيظهر تسجيل وحدة التحكم (إلا إذا كنت تستخدم --silent ).

إذا كان السلوك الحالي عبارة عن خطأ ، فالرجاء تقديم خطوات إعادة الإنتاج وإما عرض تجريبي من خلال https://repl.it/languages/jest أو مستودع أدنى على GitHub يمكننا من خلاله yarn install و yarn test .

ما هو السلوك المتوقع؟

سيكون من المفيد للغاية أن ترى فقط تسجيل وحدة التحكم في الاختبارات الفاشلة لأن هذا هو الوقت الذي تكون فيه في أمس الحاجة إليه. لاجتياز الاختبارات ، يمكن إخفاء سجلات وحدة التحكم.

يرجى تقديم تكوين Jest الدقيق الخاص بك وذكر إصدار Jest والعقدة والغزل / npm ونظام التشغيل لديك.

$ jest --version && node --version && yarn --version
v20.0.4
v6.10.3
0.27.5

نظام التشغيل Mac OS X 10.12.5

jest.config.js :

module.exports = {
  collectCoverageFrom: ['src/**/*.{js,jsx}'],
  coveragePathIgnorePatterns: [
    '<rootDir>/node_modules/',
    '<rootDir>/src/core/server/webpack-isomorphic-tools-config.js',
    '<rootDir>/src/locale/',
  ],
  moduleDirectories: [
    'src',
    'node_modules',
  ],
  moduleFileExtensions: [
    'js',
    'json',
    'jsx',
  ],
  moduleNameMapper: {
    // Prevent un-transpiled react-photoswipe code being required.
    '^photoswipe$': '<rootDir>/node_modules/photoswipe',
    // Use the client-side logger by default for tests.
    '^core/logger$': '<rootDir>/src/core/client/logger',
    // Alias tests for tests to be able to import helpers.
    '^tests/(.*)$': '<rootDir>/tests/$1',
    // Replaces the following formats with an empty module.
    '^.+\\.(scss|css|svg|woff|woff2|mp4|webm)$': '<rootDir>/tests/emptyModule',
  },
  setupTestFrameworkScriptFile: '<rootDir>/tests/setup.js',
  testPathIgnorePatterns: [
    '<rootDir>/node_modules/',
    '<rootDir>/(assets|bin|config|coverage|dist|docs|flow|locale|src)/',
  ],
  testMatch: [
    '**/[Tt]est(*).js?(x)',
    '**/__tests__/**/*.js?(x)',
  ],
  transform: {
    '^.+\\.js$': 'babel-jest',
    // This transforms images to be a module that exports the filename.
    // Tests can assert on the filenname.
    '^.+\\.(jpg|jpeg|gif|png)$': '<rootDir>/tests/fileTransformer',
  },
  transformIgnorePatterns: [
    '<rootDir>/node_modules/',
  ],
  verbose: false,
};

التعليق الأكثر فائدة

متفق عليه ، فإن وجود علامة aa لإخفاء إخراج وحدة التحكم لاختبار PASS وتركها لاختبار FAILED سيكون إضافة رائعة لجعل إخراج الاختبار أكثر قابلية للقراءة

ال 47 كومينتر

يمكنك كتابة مراسل مخصص. سي سي @ aaronabramov

مرحبا ، شكرا على المعلومات المفيدة.

ومع ذلك ، حاولت كتابة مراسل مخصص وواجهت بعض العقبات:

  • لا توجد طريقة سهلة لوراثة جميع الوظائف من المراسل الافتراضي (مخرجات الاختبار بالمعلومات ، إلخ) وأنا أفضل عدم إعادة تنفيذها كلها من البداية
  • عندما أقوم بتضمين المراسل الافتراضي في التكوين الخاص بي ، وتمرير --silent في CLI (لجعل المراسل الافتراضي يخفي تسجيل وحدة التحكم) ، وأضف المراسل المخصص إلى التكوين الخاص بي ، لا أرى طريقة سهلة في مراسل مخصص لطباعة التسجيل. يبدو أنه بسبب الخيار --silent ، لم يعد بإمكان فئات المراسلين الوصول إلى وحدة التحكم المخزنة.

لهذا السبب ، أود أن أقترح تصحيحًا لـ Jest والذي سيقدم قيمة تكوين لإظهار وحدة التحكم فقط في الاختبارات الفاشلة. هل تفكر في مثل هذا التصحيح؟

من الواضح أن هذا يحتاج إلى اختبارات وسيحتاج إلى التحقق من قيمة التكوين ولكن هذه هي الفكرة العامة (التي تعمل):

diff --git a/packages/jest-cli/src/reporters/default_reporter.js b/packages/jest-cli/src/reporters/default_reporter.js
index 08d4a9f2..adedbdd3 100644
--- a/packages/jest-cli/src/reporters/default_reporter.js
+++ b/packages/jest-cli/src/reporters/default_reporter.js
@@ -176,7 +176,8 @@ class DefaultReporter extends BaseReporter {
       this.log(getResultHeader(result, config));

       const consoleBuffer = result.console;
-      if (consoleBuffer && consoleBuffer.length) {
+      const testFailed = result.numFailingTests > 0;
+      if (testFailed && consoleBuffer && consoleBuffer.length) {
         this.log(
           '  ' +
             TITLE_BULLET +

تعجبني هذه الفكرة بالفعل ، ولكن هناك العديد من الأشياء التي نحتاج إلى أخذها في الاعتبار

نحتاج إلى إضافة بعض المعلومات حول المخرجات المخفية

PASS __tests__/my_test.js (hidden output)

يجب علينا أيضًا تعطيله عند إجراء بعض الاختبارات أو اختبار واحد (أعتقد إلى حد كبير تمكينه فقط لإجراء اختبار كامل)

cpojer هل لديك أي أفكار حول هذا؟

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

cpojer بالنسبة لي ، من المحير محاولة العثور على رسائل وحدة التحكم المتعلقة

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

هذا ما يبدو عليه مخرجات الاختبار الخاصة بي:

screen shot 2017-11-05 at 16 11 29

لا يمكنني التخلص من التحذيرات بسبب https://github.com/facebook/flow/issues/4673 ، ولحسن الحظ ، لا يوجد سوى بضع رسائل سجل ، ولكن إذا أردت إضافة المزيد من عمليات التسجيل ، فسيزداد الأمر سوءًا .

أنا ثاني ذلك @ miracle2k ، عندما تتلقى الكثير من التحذيرات والأخطاء من التبعيات ، فإنه يجعل من الصعب جدًا العثور على اختبارات فاشلة. سيكون من الجيد أن يكون لديك علم يمكنك اجتيازه والذي سيعيد فقط قائمة الاختبارات الفاشلة.

متفق عليه ، فإن وجود علامة aa لإخفاء إخراج وحدة التحكم لاختبار PASS وتركها لاختبار FAILED سيكون إضافة رائعة لجعل إخراج الاختبار أكثر قابلية للقراءة

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

تمت الموافقة على العلامة التي تخفي إخراج وحدة التحكم لاختبارات PASS.

PASS __tests__/my_test.js (hidden output)

هل يمكننا إعادة النظر في هذه الإضافة بأي فرصة؟

لدينا الآن طريقة لإجراء الاختبارات الفاشلة ، والتي يجب أن تغطي حالة الاستخدام هذه. انظر # 4886 (متاح في jest 22)

لدينا الآن طريقة لإجراء الاختبارات الفاشلة ، والتي يجب أن تغطي حالة الاستخدام هذه.

إنه يغطي القضية جزئيًا فقط. على سبيل المثال ، إذا فشلت 5 من أصل 100 اختبار في مجموعة بها الكثير من عمليات التسجيل ، فيمكنك إعادة تشغيل الاختبارات الفاشلة فقط لفهم إخراج وحدة التحكم. ومع ذلك ، إذا كنت تخفي التسجيل لاجتياز الاختبارات طوال الوقت ، فلن تحتاج إلى إعادة إجراء الاختبارات.

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

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

@ kumar303 يرجى إرسال العلاقات العامة ، يبدو أنه ليس معقدًا إلى حد ما للحفاظ عليه :)

@ kumar303 هل انتهى بك الأمر بتقديم العلاقات العامة؟ أود الحصول على هذا أيضًا.

ما زلت أعتزم تقديم واحدة ولكني لم أتمكن من إيجاد الوقت بين أولويات العمل الأخرى. إذا هزمني أي شخص آخر ، فيرجى إبلاغي بذلك حتى أتمكن من المساعدة في اختباره!

كانت فكرتي هي تصدير DefaultReporter من jest.js حتى يتمكن المراسل المخصص من تمديده. كنت أفكر في البدء بتغيير هذا الخط إلى شيء مثل:

const testFailed = result.numFailingTests > 0;
if (testFailed && consoleBuffer && consoleBuffer.length) {
  // Log console output
}

أنا متأكد من أنه سيحتاج إلى مزيد من التعديلات بعد ذلك.

@ kumar303 كيف يمكنني إضافة الكود الخاص بك إلى تكوين jest الخاص بي؟

أنا مهتم أيضًا بهذا. باتباع فكرة @ kumar303 ، تمكنت من كتابة مراسل مخصص يمتد إلى default_reporter بسهولة كافية (على الرغم من هشاشته ، حيث أنني أستورده مباشرةً من jest-cli/build/reporters/default_reporter ) ، ثم تحويل result.console كما أراه مناسبًا (في هذه الحالة أسمح للمستخدم بتعيين حد أدنى لمستوى السجل).

إنه يعمل بشكل جيد باستثناء شيء واحد - عند إجراء اختبار واحد ، لا يتم تخزين رسائل وحدة التحكم مؤقتًا. هذا مذكور هنا: https://github.com/facebook/jest/issues/2080

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

سعيد لفضح مراسلنا الافتراضي بطريقة أكثر نظافة.

تمانع في فتح قضية منفصلة حول قوة التخزين المؤقت console.logs؟ يجب أن تكون متسقة

هل هناك جانب سلبي كبير لوجود متغير تكوين عالمي مثل showLogsForFailedTests: true ؟ لا تغير القيمة الافتراضية شيئًا من طريقة عمل Jest حاليًا وقيمة false ستجعل القراءة خلال الاختبارات أكثر متعة.

هل تم إغلاق هذه المشكلة لأن شيئًا ما تم إجراؤه لإصلاحها أم أنها مغلقة لأن أكثر من 30 شخصًا يتخيلون أن لديهم مشكلة مع Jest لا يواجهونها بالفعل؟

يا فتى ، اعتقدت أن هذا نهج معياري إلى حد كبير لإظهار السجل الفاشل من أجل الدعابة فقط ... هل ما زالت هذه مشكلة؟

أحتاج هذا. إنه يعطل حقًا.

لمعلوماتك: لقد نجحنا في تنفيذ فكرة @ kumar303 في مراسل مخصص استنادًا إلى المراسل الافتراضي لـ Jest هنا: https://github.com/mozilla/addons-frontend/blob/e1606743d79e779b1902399685f35a90aa6b9ab9/tests/jest-reporters/fingers-crossed. شبيبة

willdurand حاولت

Test Suites: 48 passed, 48 total
Tests:       78 passed, 78 total
Snapshots:   73 passed, 73 total

لا تزال جميع السجلات أثناء الاختبارات تظهر.

هل ربما قمت بتشغيله لاختبار واحد فقط؟ انظر تعليقي السابق و
تقرير الشوائب المرتبطة. ليس من الممكن التقاط السجلات مع مراسل
عند إجراء اختبار واحد فقط ، فهذه هي النقطة الشائكة الحقيقية.

في الأربعاء 8 أغسطس 2018 الساعة 7:08 مساءً كتب jazoom [email protected] :

willdurand https://github.com/willdurand حاولت مراسلتك . انا
لست متأكدًا مما كان يمكن أن أفعله خطأ لأن كل ما فعلته هو تحديد هذا الملف
كمراسل. كل ما فعلته هو منع هذا من الظهور في نهاية
الاختبارات:

مجموعات الاختبار: 48 ناجحًا ، إجمالي 48
الاختبارات: نجحت 78 ، المجموع 78
لقطات: تم تمرير 73 ، المجموع 73

لا تزال جميع السجلات أثناء الاختبارات تظهر.

-
أنت تتلقى هذا لأنك مشترك في هذا الموضوع.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/facebook/jest/issues/4156#issuecomment-411582223 ، أو كتم الصوت
الخيط
https://github.com/notifications/unsubscribe-auth/AAi-gO9_uEJPO4xnhkpfGore_hEX81fUks5uO29bgaJpZM4OnBQQ
.

jamietre لقد قمت

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

Test Suites: 48 passed, 48 total
Tests:       78 passed, 78 total
Snapshots:   73 passed, 73 total

jazoom لن يكون للمراسل أي تأثير إذا كان لديك verbose: true في التكوين الخاص بك. حاول ضبط ذلك على false .

jamietre أوافق. من السلوك الغريب أن التشغيل التجريبي الفردي لا يلتقط أو يعرض أي مخرجات وحدة تحكم على الإطلاق (https://github.com/facebook/jest/issues/6441).

من غير المفيد أيضًا كيف لا تجمع jest إخراج وحدة التحكم عن طريق الاختبار (https://github.com/facebook/jest/issues/2080). يمكن للمراسل المخصص أن يعرض فقط مخرجات المجموعة (أي ملف اختبار) ، وليس اختبار فشل محدد.

jazoom تأكد أيضًا من إعادة تشغيل jest تمامًا بعد تثبيت أو تغيير المراسل. قد لا يكون هذا واضحًا لأن المزاح سيتعرف على التغييرات التي تطرأ على ملفات المصدر الأخرى أثناء التشغيل (ولكن ليس المراسلين).

@ kumar303 لم يتم تعيينه على

ماذا تقصد ب "إعادة التشغيل بالكامل"؟ إنه مجرد نص يتم تشغيله.

ماذا تقصد ب "إعادة التشغيل بالكامل"؟

أعني أنه إذا كنت في وضع ساعة jest ، فأنت بحاجة إلى الخروج.

تمام. لا أستخدم وضع المشاهدة.

آه نعم ، في الواقع. لم ألاحظ ذلك ، ولكن لبعض الأسباب ، لا يُخرج Jest الملخص النهائي في الأسفل ، بمجرد تشغيل جميع مجموعات الاختبار.

أفترض أن هذا بسبب قيامنا بتمديد DefaultReporter وليس SummaryReporter ، ربما ..

willdurand لقد جربت التهيئة التي تخفي السجلات بنجاح. ومع ذلك ، لم يعد يتم مسح الجهاز الطرفي (السجلات السابقة) وكل السجلات مكدسة تحت السجلات الأخرى.

ملاحظة: بمجرد تصدير فئة DefaultReporter ، أعود إلى التسجيل الافتراضي ولكن السجلات مكدسة أيضًا

لقد لعبت قليلاً مع FingersCrossedReporter من @ kumar303 / willdurand
ومع ذلك ، كما لاحظ البعض الآخر ، فإنه لا يطبع ملخص الاختبار في نهاية الاختبارات. هذا لأن (على ما أعتقد) تستخدم إعدادات Jest الافتراضية اثنين من المراسلين - DefaultReporter و SummaryReporter.
أنا الآن غير قادر على استيراد SummaryReporter مباشرة في تكوين jest الخاص بي لأنه تم تصديره افتراضيًا ولا يبدو أنه قابل للاستيراد. لقد قمت بالتغلب عليه من خلال إعادة تصديره من ملف آخر.

//summary-reporter.js
const SummaryReporter = require('@jest/reporters/build/summary_reporter')
  .default;
module.exports = SummaryReporter;
//log-on-fail-reporter.js
Content: https://gist.github.com/GeeWee/71db0d9911b4a087e4b2486386168b05
Same as reporter above, but with updated import paths for the new jest structure

التكوين الدعابة

    "reporters": [
      "<rootDir>/src/test-reporters/log-on-fail-reporter.js",
      "<rootDir>/src/test-reporters/summary-reporter.js"
    ],

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

سنصلح دعم التصدير الافتراضي لـ jest 25.

يمكنك أيضا أن تفعل

//summary-reporter.js
const {SummaryReporter} = require('@jest/reporters')
module.exports = SummaryReporter;

قد نرغب في إضافة ملفات @jest/reporters/SummaryReporter إلخ رغم ذلك ، لذا لا تحتاج إلى ملف js الوسيط ... هل تريد فتح طلب ميزة منفصل لذلك؟

لماذا تم إغلاق طلب الميزة هذا؟
يبدو أن العديد من الأشخاص يجدون أنه من المعقول تضمين هذه الميزة في المزاح الجاهز. على الأقل كخيار تكوين.
يمكنك @ kumar303 فتحه مرة أخرى؟

يمكنك @ kumar303 فتحه مرة أخرى؟

هيه. لا ، ليس لدي وصول. كان هذا هو الأساس المنطقي للإغلاق: https://github.com/facebook/jest/issues/4156#issuecomment -324638718 أوافق على أنها ميزة أساسية. أنا مندهش من كيف يمكن لمطوري المزاح الأساسيين العيش بدونها ، لكن ربما لا يكتبون تعليمات برمجية تحتوي على أخطاء ، لذا فهم لا يحتاجون إلى سجلات.

يرجى إعادة الفتح. نحن بحاجة إلى هذا أيضًا.

لماذا هذا غير ممكن بعد؟

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

لا أعرف طريقة أخرى لتسجيل دعمي لهذا السلوك سوى ترك تعليق. أعلم أن 👍 وما شابه ذلك أقل فائدة ، لذا فإن هذا هو أفضل ما يمكنني فعله. شكرا على كل شيء من جميع المشاركين! لقد تابعت كل المواضيع وأنا أتطلع إلى هذا كلما كان لدى الناس دورات للحصول على الأشخاص الذين يريدون لول.

الشيء الذي لم يتم تطبيق هذه الميزة منذ ما يقرب من ثلاث سنوات ، عندما يكون ذلك ضروريًا ، هو نوع من الغريب.

بناءً على المقتطفات التي وجدتها حول الإنترنت ، توصلت إلى تكوين عالمي لهذا ؛ راجع https://stackoverflow.com/questions/58936650/javascript-jest-how-to-show-logs-from-test-case-only-when-test-fails/61909588#61909588

نأمل أن يساعد هذا شخص ما.

قد ترغب في إلقاء نظرة على https://github.com/AtakamaLLC/capio لالتقاط غير متزامن.

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

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

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