Jest: لا ينتج console.log عند تشغيل الاختبارات

تم إنشاؤها على ٢٥ ديسمبر ٢٠١٦  ·  236تعليقات  ·  مصدر: facebook/jest

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

الإبلاغ عن خطأ .

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

استدعاء console.log باستخدام الاختبار الافتراضي لبيئة jsdom لا تتم طباعته إلى stdout.

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

  1. استنساخ https://github.com/udbhav/jest-test
  2. قم بتشغيل yarn test
  3. تأكد من أنك لا ترى أي شيء من console.log
  4. قم بتغيير إعداد التكوين testEnvironment Jest إلى node
  5. أعد تشغيل yarn test
  6. تأكد من أنك ترى مخرجات من console.log

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

أتوقع أن يكون لديك console.log دائمًا إخراج أثناء تشغيل اختباراتي.

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

انظر package.json و yarn.lock في الريبو لإصدارات الحزم. أنا أقوم بتشغيل العقدة 7.3.0 والغزل 0.18.1

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

أنا أستخدم العقدة v4.4.7 ، وبقدر ما أشعر بالقلق - عدم وجود أي شيء يظهر على stdout عند استخدام console.log يمثل مشكلة. لا أحاول الحصول على مساعدة بشأن الترميز ، فأنا أبلغني عما يبدو أنه خطأ. الشيء الآخر الوحيد الذي تغير هو أنه كان لدي عدة ملفات اختبار قيد التشغيل من قبل ، والآن ملف واحد فقط. دعني أرى ما إذا كانت إعادة تمكين الاختبارات الأخرى تؤدي إلى ظهور مخرجات console.log مرة أخرى.

ال 236 كومينتر

اختبرت هذا للتو باستخدام repl.it: https://repl.it/EwfT/0

النبأ السار هو أنه يعمل كما هو متوقع ومخرجات console.log. حاولت تخفيض إصدار المزاح الخاص بي إلى 17.0.3 ، وما زلت أرى نفس المشكلات. تم تثبيت nvm للاختبار باستخدام العقدة v6.9.2 ، ويعمل Hurray console.log مع jsdom ، لذلك أفترض أن المشكلة مرتبطة بالعقدة v7.

نشكرك على الإبلاغ عن هذا ، ولكن هذه نسخة مكررة من # 2166 وتحدث في Node 6 أيضًا.

thymikee كيف هذه نسخة مكررة من # 2166؟ في هذا السيناريو ، لا ينتج console.log أي شيء على الإطلاق. أواجه هذه المشكلة مع Node v4. الشيء المحبط هو أنه كان يعمل بشكل جيد في وقت سابق اليوم ، ومع عدم وجود تغييرات في بيئتي ، لم أحصل على المزيد من المخرجات console.log إلى جهازك الطرفي.

thisissami يبدو أن اختبارك أو

cpojer - console.log الرسائل لا تظهر. لقد اكتشفت هذا عندما حاولت معرفة خصائص كائن معين بواسطة console.log ing فإنه ، ولم أشاهد أي مخرجات. لقد أضفت العديد من كشوفات الحساب console.log ولا يظهر أي منها في محطتي الطرفية الآن. = / أنا أعود حاليًا إلى Jest v17 لمعرفة ما إذا كان هذا يغير شيئًا.

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

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

cpojer لا أعرف ماذا أقول ، لا أرى أي خطأ في كود الاختبار الخاص بي ولكن لم يتم إخراج أي شيء إلى stdout:

import React from 'react';
import {shallow} from 'enzyme';
import FundPercentage from '../../src/reactClasses/fund_percentage';

console.log('cmon');
describe('Normal Percentage', () => {
  console.log('do this');
  const percentage1 = shallow(
    <FundPercentage percentage={0.5}/>
  );
  const percentage2 = shallow(
    <FundPercentage percentage={0.26}/>
  );
  it('should work', () => {
    console.log(percentage1.childAt(0));
    expect(0).toBe(1);
  });
});

فشل الاختبار ، كما هو متوقع ، لذلك أعلم أنه يعمل. التكوين الخاص بي في package.json بسيط حقًا ، فقط:

  "jest": {
    "collectCoverageFrom": [
      "src/*.jsx"
    ]
  }

ركضت الدعابة بشكل طبيعي تمامًا ، ولم يتم إرفاق أي أعلام إضافية. نفس المشكلة مع Jest v17 و 18.

لم أغير أي ملفات بخلاف هذا في فترة الظهيرة بأكملها. لقد بدأت للتو في فهم كيفية عمل enzyme خلال إخراج أشياء مختلفة إلى stdout ، وبعد البدء في إضافة بعض expects ، توقف console.logs أعمل عندما احتجت إليهم مرة أخرى ، والآن لا يعملون على الإطلاق - بغض النظر عما لدي في الاختبار. لم أقم بتغيير أي شيء في بيئتي أيضًا (بعد الرجوع الآن إلى الإصدار 17) ، وهو أمر محير بالتأكيد.

يبدو أنك قمت بالتحديث إلى العقدة 7.3. لدينا بعض الإصلاحات لذلك. يرجى ملاحظة أن أداة تعقب المشكلة هذه ليست منتدى مساعدة ؛ استخدم stackoverflow للأسئلة :)

أنا أستخدم العقدة v4.4.7 ، وبقدر ما أشعر بالقلق - عدم وجود أي شيء يظهر على stdout عند استخدام console.log يمثل مشكلة. لا أحاول الحصول على مساعدة بشأن الترميز ، فأنا أبلغني عما يبدو أنه خطأ. الشيء الآخر الوحيد الذي تغير هو أنه كان لدي عدة ملفات اختبار قيد التشغيل من قبل ، والآن ملف واحد فقط. دعني أرى ما إذا كانت إعادة تمكين الاختبارات الأخرى تؤدي إلى ظهور مخرجات console.log مرة أخرى.

cpojer متأكد تمامًا من وجود خطأ هنا يا رفاق.

تشغيل 3 اختبارات (كما هو الحال في 3 ملفات مختلفة مع .test.js ، مع وجود 2 من هذه الملفات كأمثلة من البرامج التعليمية الخاصة بك) يعمل بدون مشكلة. يعرض الاختبار الخاص بي (المنسوخ أعلاه) جميع console.logs.

بعد تشغيل تجريبي واحد فقط (إعادة تسمية .test.js إلى .teast.js على 2 من الملفات) ينتج عن عدم عرض مخرجات console.log.

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

تختبر مجموعة اختبار Jest هذا السلوك على العقدة 4 والعقدة 6 والعقدة 7.3. إنه يعمل لـ 4 و 6 ولكن تم كسره في 7.3. أنا أصلح هذا للعقدة 7.3 وسأنشر إصدارًا جديدًا من Jest قريبًا: https://github.com/facebook/jest/pull/2464

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

استنساخ المستودع وتجربته الآن.

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

screen shot 2016-12-28 at 5 55 29 pm

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

حسنًا رائع - شكرًا لملاحظاتك. هل لديك أي فكرة عما يمكن أن يتسبب في تشغيله عندما يكون هناك ملفات متعددة ولكن ليس عندما يكون هناك واحد فقط؟ إذا لم يكن هناك أمر واضح "يا هذا يتسبب أحيانًا في مشكلة من هذا القبيل" تتبادر إلى ذهنك - فلا داعي للقلق ، فسأضمن فقط وجود ملفين على الأقل قيد التشغيل. :)

أواجه نفس المشكلة ، لم يتم إخراج console.log بالنسبة لي الآن (وكان ذلك في السابق منذ حوالي ساعة). أنا أستخدم العقدة 6.9.1 وأقوم أيضًا بتمكين علامة --forceExit. عند عدم تمكين هذه العلامة ، يظهر إخراج console.log.

ومع ذلك ، لدي برنامج نصي آخر للاختبار يستخدم العلامة --forceExit وظهر console.log ، لذلك لا يمكنني القول أن علامة --forceExit هي التي تسبب هذا السلوك.

كما يفعل thisissami ، أواجه مشكلة التسجيل فقط عندما أحاول اختبار ملف واحد.

كنت أواجه نفس المشكلة ، لكنني وجدت أنها كانت بسبب تشغيل jest عبر jest-cli (jest.runCLI) داخل gulpfile.js وكان يبتلع إخراج console.log. إذا قمت بتشغيل الدعابة مباشرة أرى إخراج وحدة التحكم.

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

1) تجري Jest اختبارًا
2) إخراج Jest لبيانات console.log (لا تومض هنا)
3) تقوم Jest بالتمرير احتياطيًا لعدد تعسفي من الأسطر ، والتي تغطي أحيانًا جميع خطوط console.log ، وأحيانًا بعضها وأحيانًا كلها.
4) يدير Jest الاختبار التالي (تختفي خطوط console.log من الاختبار السابق).

دعابة v18.1.0

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

أواجه نفس المشكلة ، وأتساءل عما إذا كان الإخراج يحل محل المخرجات الأخرى. من حين لآخر ، سأرى شيئًا كهذا:

image

إنها مثل عملية واحدة نتجت عن خطأ (أنواع دعم فاشلة) ولكن تمت كتابتها مباشرة من خلال سجلات مخرجات الاختبار.

أكثر:

image

وأحيانًا إذا كنتُ Ctrl + c أثناء إجراء الاختبارات ، فسأرى سجلات وحدة التحكم التي لا يمكنني رؤيتها إذا تركت الاختبارات تنتهي.

إصدارات
دعابة: 17.0.1
العقدة: 6.6.0
NPM: 3.10.3
نظام التشغيل macOS: 10.12.2
المحطة الطرفية: 2.7.1 (وأيضًا في iTerm2 3.0.13)
البرنامج النصي (في package.json ): jest /src/main/js --watch أو jest /src/main/js --coverage أو jest --watch --onlyChanged جميعها لها نفس السلوك.

davidgilbertson هل يحدث هذا في الإصدار 18.1؟

لقد جربت 18.1.0 ويبدو الأمر أكثر صعوبة. وما زلت أرى أشياء مثل هذا:

image

لا يمكنني اختيار أي نمط معين ، ولكن بعض الأشياء التي حدثت (لدي console.warn('----------------') في أحد مكوناتي.)

  • إذا قمت بالتمرير لأعلى قليلاً من الأسفل عند إجراء الاختبارات ، أرى السجل. إذا قمت بالتمرير لأسفل في نافذة المحطة الطرفية أثناء إجراء الاختبارات (بحيث تبدأ في التمرير التلقائي) ، فعند انتهاء الاختبار ، انتقل لأعلى وأختفي سطر التحذير من وحدة التحكم (يُفترض أن يتم الكتابة فوقه).
  • إذا أجريت الاختبارات وضربت على الفور ctrl + c ، أرى بعض سجلات وحدة التحكم. ولكن إذا فعلت الشيء نفسه ولم أقاطعه ، فلن تكون سجلات وحدة التحكم هذه مرئية.
  • عندما أقوم بتشغيل jest /src/main/js --watch مرة واحدة ، ثم اضغط على a للتشغيل مرة أخرى ، فإنه يلتقط عددًا كبيرًا من الاختبارات القديمة في دليل src/main/assets/legacy - لا يتطابق مع الكرة الأرضية.
  • مثل ما ورد أعلاه إذا قمت للتو بتشغيل jest --watch (تنتهي جميع اختباراتي بـ .test.js أو .test.jsx ). لذا يبدو أن الضغط على "a" في وضع المشاهدة سيبحث في كل مكان ، بما في ذلك اختبار الياسمين القديم المسمى src/test/js/spec/categoryselector/spec.js . يبدو أن ضرب Enter يفعل ما أتوقعه.

هل يمكن أن تكون جميع الأخطاء التي تم إلقاؤها بواسطة الدعائم المفقودة سببًا في حدوث هذه المشكلة؟ لا بد لي من الاحتفاظ بالمخرجات ctrl+c ing لمحاولة اكتشاف هذه الأخطاء قبل الكتابة فوقها.

لا يعمل لدي أيضًا (jest 19.0.1 ، العقدة 5.12). ومن المثير للاهتمام أنه يعمل في مشروع آخر بنفس الإعداد. لست متأكدًا من كيفية تصحيح أخطاء اختبارات Jest ، لذا أعتقد أن القدرة على رؤية بعض رسائل وحدة التحكم ستكون مهمة للغاية.

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

تمنع العلامة bail طباعة سجلات وحدة التحكم.

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

لا شيء من هذا يبدو أنه يساعد. توقف علامة --bail فقط عن تشغيل الاختبارات الأخرى (الاختبار المخالف هو آخر اختبار على أي حال في حالتي) ، ولا يبدو أن لدى --runInBands أي فرق يمكن ملاحظته. يقوم Jest بتشغيل الملفات المحدثة بالمناسبة ، لذلك إذا قمت بإدراج عبارة console.log ، فإن تتبع مكدس الأخطاء يعرض الخطأ القادم من رقم السطر المحدث. إنه مجرد سجل وحدة التحكم لا يحدث. نظرًا لأنه من الصعب / المستحيل تصحيح هذه الاختبارات في المستعرض (الرجاء تصحيح لي إذا لم يكن الأمر كذلك) ، يعد console.log أمرًا حيويًا للغاية لإصلاح بعض المشكلات في الاختبارات.

يبدو أن حالة الاختبار هذه لم تكن قيد التشغيل في الواقع. كان هناك خطأ TypeError (الوصول إلى خاصية على غير معرف). ما يضللني هو أنني رأيت بالفعل تتبع المكدس على وحدة التحكم ، وهو نوع يشير إلى أنه يتم تنفيذه. لذا ، فإن رؤية التتبع ولكن عدم رؤية رسالة السجل لا يضيف شيئًا صحيحًا :) هل يعرف أي شخص لماذا يتم ذلك بهذه الطريقة ، لذلك إذا فشل الاختبار مع ظهور خطأ في وقت التشغيل ، فلن يتم إخراج السجلات كما يبدو؟ (فقط لكي أكون واضحًا ، أعني السجلات التي حدثت حتى نقطة الخطأ ، من الواضح أنني لا أعني السجلات بعد الخطأ :))

في بيئتي ، تم تعيين verbose: true في خيارات الدعابة في package.json . أدى تغيير هذا إلى خطأ (أو إزالته) إلى إصلاح المشكلة بالنسبة لي. تظهر جميع سجلات وحدة التحكم الخاصة بي الآن.

هذا في 18.1.

بالنسبة لأي شخص آخر يواجه هذه المشكلة ، تحقق من أي تبعيات تمت إضافتها مؤخرًا. لقد بدأت في مواجهة المشكلات بعد إضافة mock-browser في محاولة للسخرية من كائنات المتصفح. يبدو أنه يستبدل global بكائنه الخاص.

package.json (jest config)

"jest": {
    "testEnvironment": "node",
    "moduleFileExtensions": [
        "js",
        "json"
    ],
    "moduleDirectories": [
        "node_modules",
        "src"
    ],
    "transform": {
        "^.+\\.js$": "babel-jest"
    },
    "roots": [
        "<rootDir>/__test__"
    ],
    "setupFiles": [
        "<rootDir>/__test__/test-setup.js"
    ],
    "moduleNameMapper": {
        "client": "<rootDir>/src/client",
        "common": "<rootDir>/src/common",
        "server": "<rootDir>/src/server",
        "!CONFIG": "<rootDir>/config/env/test.js",
        "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/file.js",
        "\\.(css|less)$": "identity-obj-proxy"
    }
}

test-setup.js

const mockBrowser = require('mock-browser').mocks.MockBrowser;

const MockBrowser = new mockBrowser();
global.APP_CONFIG = require('!CONFIG').default;

global.__DEVELOPMENT__ = false;
global.__TESTING__ = true;
global.__PRODUCTION__ = false;
global.document = MockBrowser.createDocument();
global.window = MockBrowser.createWindow();
global.localStorage = MockBrowser.getLocalStorage();

test-setup.js
التعليق على بتات mock-browser ...

// const mockBrowser = require('mock-browser').mocks.MockBrowser;

// const MockBrowser = new mockBrowser();
global.APP_CONFIG = require('!CONFIG').default;

global.__DEVELOPMENT__ = false;
global.__TESTING__ = true;
global.__PRODUCTION__ = false;
// global.document = MockBrowser.createDocument();
// global.window = MockBrowser.createWindow();
// global.localStorage = MockBrowser.getLocalStorage();

console.log يعمل بشكل جيد.

لماذا تم إغلاق هذه القضية؟ من الواضح أنها ليست نسخة مكررة من # 2166

سأضيف 0.02 دولار لأنني واجهت هذا للتو.

القضية:

  • أنا أستخدم jest --watch --verbose (الإصدار 19.0.2)
  • لا تظهر بعض عبارات (وليس كلها!) console.log ، لا أثناء التشغيل التجريبي ولا في الملخص
  • في حالتي، وأنا يمكن عزلها إلى _.reduce الدعوة: كل console.log البيانات داخل هذه الكتلة لا تظهر، console.log تظهر البيانات خارج الحد كتلة. لقد تحققت بوسائل أخرى (التغطية ، نتائج الاختبار) من أنه يتم استدعاء جسم المخفض في الواقع. هذا أمر غريب لأنني لا أفعل أي شيء غير متزامن / وعد قائم في هذا الجزء من الكود ، ولا يمكنني أن أفهم سبب تأثير تقليل المكالمة على أي شيء.
  • إذا استدعيت الدعابة باستخدام --runInBand ، أرى جميع كشوفات الحساب console.log .
  • على عكس معظم التقارير السابقة ، أعمل باستخدام "testEnvironment": "node" ، وليس jsdom

يبدو أن التعليقات التالية مرتبطة بمشكلتي:

https://github.com/facebook/jest/issues/2441#issuecomment -273643521
https://github.com/facebook/jest/issues/2441#issuecomment -278202180

إنه سريع جدا، لكنه لا يبدو كما هي في الواقع الانجرار وconsole.logs إلى الشاشة ومن ثم الكتابة.

تأكد للتو من خلال مقطع فيديو أن console.log يتم رسمه في الواقع على الشاشة لمدة 0.2 ثانية تقريبًا قبل أن يتم سحبه.

تشغيل --watch بدون --verbose يبدو أنه يصلح هذا.

لقد أمضيت 10 دقائق في محاولة الحصول على حالة منفصلة ، لكن لا يمكنني فعل ذلك على ما يبدو. ربما يظهر فقط مع مجموعات اختبار كبيرة (جيدًا ،> 1).

يمكنك رؤية السلوك هنا:

  • قبل console.log
    screen shot 2017-03-29 at 3 38 51 pm

  • console.log - يظهر لجزء من الثانية (<0.2 ثانية)
    screen shot 2017-03-29 at 3 39 34 pm

  • بعد رسم وحدة التحكم
    screen shot 2017-03-29 at 3 39 47 pm

هذه المشكلة سيئة حقًا ، حيث تضيع الكثير من الوقت في هذه المشكلة ولا يبدو أن أي شيء يعمل. لقد اخترت الدعابة لأنني اعتقدت أن مهندسي Facebook لديهم مجموعة اختبار جيدة والآن هذا ...

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

لماذا لا تتوقف عن محاولة إخفاء مخرجات وحدة التحكم عن المطورين؟ إذا كنت أريد عجلات تدريب سأستخدم Angular 1!

هذا عدواني للغايةhalis. نحن نقوم بذلك لأن Jest يوازي الاختبارات وقد يتم تسجيل العديد من الاختبارات إلى المحطة في نفس الوقت ، مما يعني أن إخراج Jest يصبح عديم الفائدة. لقد اعتدنا فعل ذلك بالفعل. إذا كنت تستخدم --verbose ، فنحن لا نخزن أي شيء مؤقتًا ونكتب مباشرة إلى وحدة التحكم.

إذا لم ينجح ذلك معك ، فربما يمكنك مساعدتنا عن طريق إرسال PR إلى Jest وتحسين هذا السلوك.

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

لقد عثرت على علامة --verbose يوم الجمعة ، والتي أعطتني ما يكفي من المخرجات لإصلاح مشكلاتي.

مرة أخرى ، آسف لكونك مثل هذا ديك حيال ذلك.

هذا عظيم. لا تدع أدوات JavaScript تفسد أيام الجمعة 😀

اي اخبار عن هذا؟ كيف اظهر console.log؟

سلوك مثير للاهتمام للغاية ، بعد ضرب رأسي عدة مرات (مثل عدة مرات) اكتشف أن - الإفراط في الكلام هو بالفعل السبب في عدم طباعة console.log.
كان الحل الأفضل بالنسبة لي هو إنشاء برنامج نصي آخر في package.json لا يحتوي على علامة مطولة عندما أريد طباعة بعض الرسائل في وحدة التحكم الخاصة بي. سأكون ممتنا حقا إذا قمت بإصلاح هذا قريبا يا رفاق

هذه المشكلة مزعجة حقًا لأنها تجعل من الصعب / المستحيل تصحيح أخطاء الاختبارات باستخدام console.log (أعرف .. مدرسة قديمة ولكنها لا تزال مريحة).
بالنسبة لي لاستخدام خيارات --runInBand جعلت بيانات السجل تظهر.

تحرير: أنا متأكد من أن الأمر مرتبط بطريقة عرض النتيجة على الشاشة ... أحد الخيارات هو أن يكون لديك مراسل "وهمي" لا يحاول العرض الرائع. هناك خيار آخر يتمثل في السماح للمطور باختيار مراسل مثل mocha.

إنه أسوأ من عدم إظهار السجلات:

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

test('async', (done) => { setTimeout((() => { expect(1).toEqual(2); throw new Error(); done(); }), 1000); });

لا يظهر اختباري expect أي مكان.

""
المهلة - لم يتم استدعاء رد الاتصال غير المتزامن خلال المهلة المحددة بواسطة jasmine.DEFAULT_TIMEOUT_INTERVAL.

  at Timeout.callback [as _onTimeout] (../../../../../../../../usr/local/lib/node_modules/jest/node_modules/jsdom/lib/jsdom/browser/Window.js:523:19)
  at ontimeout (timers.js:386:14)
  at tryOnTimeout (timers.js:250:5)
  at Timer.listOnTimeout (timers.js:214:5)

""

لا توجد مساعدة runInBand ولا verbose:false .

لدي تكوين بسيط تافه ( babel-jest ).

richburdon للاختبارات غير المتزامنة باستخدام رد الاتصال done تحتاج إلى تغطية حالة الفشل بـ done.fail()

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

test('async', (done) => { setTimeout((() => { expect(1).toEqual(2); throw new Error(); done(); }), 1000); });

test('async', (done) => {
  setTimeout((() => {
    expect(1).toEqual(2);
    try {
      throw new Error();
    } catch (error) {
      done.fail(error);
    }
    done();
  }), 1000);
});

لقد فهمت أن هذا ليس مثاليًا ، لكن هذه هي الطريقة التي يعمل بها حاليًا. من الجدير ملاحظة ، أنها ليست مشكلة ، عندما تقوم الوظيفة المختبرة بإرجاع وعد . هناك مشكلتان تتأثران بهذا السلوك ، مثل https://github.com/facebook/jest/issues/2136 أو https://github.com/facebook/jest/issues/2059. إذا كانت لديك فكرة عن كيفية تحسينها ، فنحن نحب مراجعة العلاقات العامة وتحقيقها.

لكن هذه ليست قضية ذات صلة بمناقشتها ، يمكنك نشر أفكارك في مكان آخر.

thymikee ، لم يكن المثال جيدًا لأن setTimeout لديه مشكلات تتعلق بوعود لا علاقة لها بالمزاح ...

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

لا أرى ذلك:

""
test ("غير متزامن"، (تم) => {
function foo () {
عودة Promise.resolve (1) ؛
}

foo (). ثم (القيمة => {
توقع (القيمة) .toEqual (2) ؛ // لم يبلغ عنها ؛ فقط مهلة.
فعله()؛
}) ؛
}) ؛
""

ليس من الواضح أن اختبار الكود يجب أن يلتقط استثناءات لمكالمات expect (على سبيل المثال ، جزء من إطار الاختبار نفسه). هذا يبدو معقدا جدا؟

لذا ، لكي أكون واضحًا ، يجب أن أختتم جميع الاختبارات التي تتضمن أي وظائف تم اختبارها والتي ترجع الوعود مع كتلة catch - للقبض على مكالمات expect ، والتي بخلاف ذلك سوف: a) timeout؛ ب) عدم الإبلاغ عن الخطأ.

ما لم أرتكب خطأ مختلفًا:

أ). ربما توثيق هذا (https://facebook.github.io/jest/docs/asynchronous.html#content)؟

ب). لماذا لا تسجل الخطأ؟ و / أو لديك خيار الخروج؟

لدي نفس المشكلة مع console.log.
كانت تعمل بشكل جيد في الإصدار 19 ، وتمكنت من رؤية الإخراج في وحدة التحكم.
بعد الترقية إلى الإصدار 20.0.3 ، يختفي الإخراج.
حاولت إضافة --runInBand أو --verbose ، لكنني لم أساعد.

قم بالترقية إلى أحدث إصدار من nodejs ، من فضلك. إنها مشكلة معروفة في العقدة ~ 7.3.

thymikee فهل سيقومون بإصلاح هذه المشكلة؟ لقد جربت كل شيء تحت الشمس. لا يوجد حتى الآن سجلات وحدة التحكم. أنا أستخدم المعالج المطبوع على الحروف والمزاح المقدم. كنت أستخدم ts-jest وعمل معالجهم المسبق. هل من الممكن أن يكون لها علاقة بالمعالج المسبق؟

cpojerlsentkiewicz يجب علينا فتح قضية جديدة منذ في قضية جديدة على الإصدار الجديد؟

كما ذكر cpojer ، فإن استخدام أحدث إصدار من العقدة يعمل على إصلاح المشكلة.

تضمين التغريدة
يعمل بالنسبة لي على v7.10.0

ما زلت أرى إخراج وحدة التحكم يتم ابتلاعه عند استخدام jest --bail .

cpojer لا يعمل على v8.0.0

لا يعمل على العقدة 8.0.0

أشعر أن هذا خطأ سيئ إذا كان عليك أن تكون على إصدار معين حتى يعمل. ماذا لو كان نظامك يعمل على 6.0 ولا يعمل في 7.0 بسبب بعض التغييرات في nodejs. ألا يجب أن يعمل المزاح على الإصدارات الحديثة على الأقل من Node؟ دعم 5 سنوات على الأقل؟ تضمين التغريدة

هذا خطأ في العقدة 7.3 فقط. قاموا بدمج تغيير سيء وإعادته مقابل 7.4 أو 7.5.

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

cpojer لا أرى أي إخراج

$ node --version
v7.4.0

الملفات

package.json :

{
  "dependencies": {
    "@types/jest": "19.2.4",
    "jest": "20.0.4",
    "ts-jest": "20.0.6",
    "typescript": "2.3.4"
  }
}

__tests__/jestconfig.json :

{
  "rootDir": "../",
  "globals": {
    "__TS_CONFIG__": {}

  },
  "moduleFileExtensions": [
    "ts",
    "tsx",
    "js",
    "jsx",
    "json"
  ],
  "transform": {
    "\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
  },
  "testRegex": "__tests__/.*test_.*\\.(ts|tsx|js)$"

__tests__/test_foo.ts :

import {} from 'jest';

console.log('CONSOLE before test');
test('fail', () => {
  console.log('CONSOLE inside test');
  expect(true).toEqual(false);
  console.log('CONSOLE end of test');
})

__tests__/test_bar.js :

console.log('BAR CONSOLE before test');
test('fail', () => {
  console.log('BAR CONSOLE inside test');
  expect(true).toEqual(false);
  console.log('BAR CONSOLE end of test');
})

انتاج |

$ jest -c __tests__/jestconfig.json 
 FAIL  __tests__/test_foo.ts
  ● fail

    expect(received).toEqual(expected)

    Expected value to equal:
      false
    Received:
      true

      at Object.<anonymous> (__tests__/test_foo.ts:6:16)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)

 FAIL  __tests__/test_bar.js
  ● fail

    expect(received).toEqual(expected)

    Expected value to equal:
      false
    Received:
      true

      at Object.<anonymous>.test (__tests__/test_bar.js:4:16)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)

Test Suites: 2 failed, 2 total
Tests:       2 failed, 2 total
Snapshots:   0 total
Time:        1.379s
Ran all test suites.

اختبار JS واحد:

$ jest -c __tests__/jestconfig.json __tests__/test_bar.js 
 FAIL  __tests__/test_bar.js
  ● fail

    expect(received).toEqual(expected)

    Expected value to equal:
      false
    Received:
      true

      at Object.<anonymous>.test (__tests__/test_bar.js:4:16)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)

  ✕ fail (7ms)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        0.596s, estimated 1s
Ran all test suites matching "__tests__/test_bar.js".

اختبار TS واحد:

$ jest -c __tests__/jestconfig.json __tests__/test_foo.ts 
 FAIL  __tests__/test_foo.ts
  ● fail

    expect(received).toEqual(expected)

    Expected value to equal:
      false
    Received:
      true

      at Object.<anonymous> (__tests__/test_foo.ts:6:16)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)

  ✕ fail (116ms)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        1.27s
Ran all test suites matching "__tests__/test_foo.ts".

تواجه نفس المشكلة مع العقدة v8.1.2. لقد جربت أيضًا العقدة v7.10.0 ولم ينجح ذلك أيضًا

أثناء العمل في مشروع React ، جربت Jest لأنه مع Jasmine هو محاولة كاملة لاختبار مكالمات HTTP باستخدام whatwg-fetch ، تنفيذ Node.js وترجمة Babel. لكن عندما رأيت أنه في الوقت الحالي مع Jest لا يمكنك الطباعة على وحدة التحكم ، كان ذلك أمرًا محظورًا لاستخدام إطار العمل هذا. وجود مشكلة مع Node.js 7.10 و Jest 20.0.4.

أخيرًا ، تمكنت من ضبط جميع بيئة الاختبار مع تنفيذ Jasmine و Node.js من خلال الإعلان عن xmlhttprequest على النطاق العالمي واستخدام nock كخادم مزيف.

يمكن أن يكون من الصعب جدًا اكتشاف الأخطاء وإصلاحها. لكن هذا هو P0 تم الإبلاغ عنه منذ 6 أشهر والذي سيمنع أي شخص من اعتبار Jest على محمل الجد كإطار اختبار لأي مشروع React.

كنت أواجه نفس المشكلة كما في لقطات شاشة davidgilbertson (نتائج الاختبار فوق console.log) على Jest 19.0.2 و Node 7.10.0 عند تشغيل jest --verbose . ما ساعدني: عند استخدام jest --verbose --runInBand عملت بشكل صحيح (أول نتيجة اختبار ، ثم كل console.log).

cpojerthymikee هل تسمح بإعادة فتح هذه المشكلة حتى تجذب الانتباه؟

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

thymikee تم إنجازه (على الرغم من أنني قمت بالفعل بالتبديل إلى mocha - لذلك لا تقلق بشأن الفرز)

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

ثم حاولت استخدام winston للتسجيل في ملف الإخراج وقد نجح الأمر. ثم حاولت استخدام winston للتسجيل في وحدة التحكم ، وخمن ماذا ، لقد نجحت!

لذا أقترح عليكم يا رفاق أن تفعلوا الشيء نفسه. تحقق من ملفي logger.js :

'use strict';

const winston = require('winston');

const customColors = {
  trace: 'white',
  debug: 'blue',
  info: 'green',
  warn: 'yellow',
  crit: 'red',
  error: 'red'
};

let config = {
  colors: customColors,

  levels: {
    trace: 0,
    debug: 1,
    info: 2,
    warn: 3,
    crit: 4,
    error: 5
  },
  transports: [
  ]
};

config.transports.push(
  new(winston.transports.Console)({
    name: 'consoleLogger',
    level: 'error',
    colorize: true,
    timestamp: true
  })
);

const logger = new (winston.Logger)(config);
winston.addColors(customColors);

module.exports = logger;

في ملفات الاختبارات فقط استخدم:

let log = require('./logger.js');
log.debug('some log here!');

يعمل Winston لأنه يستخدم process.stdout.write الذي يتغلب على هذا الخطأ في Jest. انتهى بي الأمر بإنشاء console.log الخاص بي باستخدام وحدة العقدة util .

eranimoDaymannovaes النظر في علة # 3853

يقول هذا التعليق أنه يعمل على 8.1.2 لكنني حاولت ذلك ولم أجعله يعمل. لقد تحولت بالفعل إلى المخاوي لأن هذا كان خطأ سيئًا للغاية.

هل سيتم إصلاح هذا الخطأ في الإصدار القادم؟ أيضا ، أين أجد عندما يكون ذلك؟

لا يمكنني الترقية إلى أحدث إصدار من العقدة (ليس خيارًا) لذلك هذا ليس حلاً. يمكنني استخدام أداة التسجيل الخاصة بي والتي يمكنني العبث بها. أنا أفكر في التحويل إلى المخاوي لكن ذلك يعتمد على كيفية تجربة استخدام المسجل.

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

لقد خفضت تصنيفي مؤقتًا إلى 19.0.2 وهذا يعمل.

واجهت نفس المشكلة واختبرتها للتو باستخدام أحدث إصدار من العقدة. انه يعمل الان. : 100:

إنه يعمل أيضًا مني بعد الانتقال من Node.js v7.10 إلى v8.1.

تم إصلاحه بالنسبة لي عند تحديث العقدة من 7.4.0 -> 8.2.1

الحصول على هذا في العقدة v8.4.0 و Jest 21.0.0-beta.1.

عند تشغيل حالة اختبار واحدة فقط باستخدام test.only ، لا يظهر إخراج console.log.

ولكن إذا قمت بإزالة --testPathPattern file وقمت بتشغيل جميع الاختبارات ، فسيظهر الناتج.

أيضًا ، إذا أضفت await Promise.delay(100) كخطوة أخيرة في الاختبار ، فسيظهر الناتج.

آسف على هذا التعليق ولكنها طريقة لجعل Jest to console.log في الوقت الفعلي بدلاً من اجتياز الاختبار أو فشله. يستخدم اختباري حلقة while التي كنت أحاول تسجيل القيم أثناء تشغيل الحلقة؟

nharrisanalyst استخدم --verbose

شكرًا لك على الرد ولكني أستخدم هذه العلامة وهي فقط console.log () بعد اجتياز الاختبار أو فشله. لذلك إذا تعطلت حلقة while الخاصة بي ، فلا يمكنني تصحيحها باستخدام console.log عند الاختبار لأن الاختبار لم ينجح أو يفشل ، فإنه عالق في حلقة.

يبدو أن Jest يأكل أي وحدة تحكم أقوم بها في setupFiles أو setupTestFrameworkScriptFile أو beforeAll ، مما يجعل من المستحيل كتابة نصوص إعداد الاختبار التي تطلب إدخال المستخدم والتحقق من الأمر أعلام الخط. يحدث مع أو بدون "verbose": true

لا تظهر مشاركة ملاحظاتي على console.log () عند إجراء الاختبارات باستخدام Jest.

الشرط المسبق لهذا هو تشغيل Jest بعلم --verbose .

إذا كنت تجري اختبارات مع ملفات اختبار متعددة ، فلن يكون الإخراج من console.log () مرئيًا (في معظم الأحيان).
إذا كان Jest يقوم بتشغيل اختبارات من ملف اختبار واحد فقط ، فإن console.log () يعمل كما هو متوقع.

يمكنك حل هذه المشكلة عن طريق:

  • قم بتشغيل اختبارات Jest من ملف واحد فقط. نعم ... غير واقعي على الإطلاق ، لذا انظر الخيار التالي.
  • استخدم العلم --maxWorkers=1 . بطريقة ما ، هذا يعمل بشكل جيد بالنسبة لي. تخميني (*) هو ... تشغيل Jest في نفس العملية وليس هناك حاجة إلى تخزين البيانات المؤقتة من كل عملية لإعادة توجيهها إلى العملية الرئيسية.

إذا كان تخميني (*) سلوكًا متوقعًا ، أقترح تحديث المستندات للإشارة إليه بوضوح لتجنب إضاعة المطورين للوقت في محاولة اكتشاف "سبب عدم ظهور console.log () الخاص بي ... في بعض الأحيان".

حسنًا ، لا تزال هذه مشكلة بالنسبة لبعض الأشخاص بمن فيهم أنا اليوم. أتخيل أنه سيستمر في كونه شيئًا.

من الاختبار الذي أجريته ، يخرج Jest من العملية قبل إخراج السجلات مما يعني أنه يبدو أنه يتم ابتلاع السجلات.

بالنسبة لي ، قمت بتعيين verbose: true و bail: false في تكوين الدعابة الخاص بي. ستستمر Jest حتى يتم تشغيل جميع الاختبارات وستخرج جميع الأخطاء والسجلات. هذا موات. قمت أيضًا بتشغيل --runInBand ، والذي يقوم بنفس طريقة إعداد --maxWorkers=1 .

كانت المساعدة الأكبر هي bail: false لأن ذلك سمح بتشغيل جميع الاختبارات حتى الانتهاء. لا يزال خارجًا بالرمز 1 لكن يمكنني رؤية جميع السجلات مرة أخرى.

تشغيل Jest v19.0.2 مع العقدة v8.1.4.

أدى تشغيل --verbose --testPathPattern=<path/to/file> إلى طباعة السجلات. خلاف ذلك ، يتم ابتلاعه.

هل يمكن لأي شخص أن يقدم استنساخًا صغيرًا يفشل في 21.2.0 المزاح والعقد الحالية (مثل 4.8.4 أو 6.11.4 أو 8.7.0)؟

ليست هناك حاجة لتهيئة verbose أو تكوينات jest إضافية وقد اختفت المشكلة للتو عندما أقوم بترقية إصدار العقدة من 7.4.0 إلى 8.0.0 . هذه ملاحظاتي.

باستخدام [email protected]

هذا محبط جدا! لدي أحدث إصدارات من كل شيء ولا يزال Jest يقطع إخراج console.log في أماكن تبدو عشوائية. هذا يجعل من الصعب جدًا تصحيح أخطاء الاختبارات الفاشلة.

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

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

لقد استخدمت expect(<value>).toEqual("someImpossibleValue") مع bail: false للتغلب على هذا عند محاولة إصلاح شيء معطل. بالتأكيد ليست مثالية ، لكنها سريعة وقذرة ...

ربما يمكنك تقديم دالة افتراض () مشابهة للتوقع () ، لكنها لا تنقذ.

تشغيل v 22.0.4 no console.log .... أضف هذا إلى أحد الأسباب الأخرى العديدة التي لا أوصي بها المزاح

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

(العقدة v9.3.0 و jest v20.0.4 هنا)

jest ^21.2.1 و node 8.9.4

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

fega بما أنه لم يقدم أي شخص حالة استنساخ يمكننا سحبها واختبارها.

$ jest --verbose

سيعرض هذا الأمر جميع سجلات وحدة التحكم

odykyi لا يعمل بالنسبة لي. jest 22.1.0 و v8.9.4

سلوك غريب. إذا قمت بتعيين verbose على false فستتم طباعة بيانات سجل وحدة التحكم الخاصة بي.

في [email protected] ، [email protected] ، وباستخدام --forceExit ، لا أرى ناتج console.log من الكود الذي تم اختباره إلا إذا قمت صراحة بتعيين verbose إلى false أو قم بإزالة علامة --forceExit (التي أستخدمها مؤقتًا).

على [email protected] ، [email protected] ، وباستخدام --forceExit ، لا أرى إخراج console.log من الكود الذي تم اختباره ما لم أقم صراحةً بتعيين مطول على خطأ أو أزلت علامة --forceExit (التي أنا أستخدمه مؤقتًا).

رؤية نفس السلوك بالضبط كما هو مذكور أعلاه. [email protected] ، [email protected].

console.logging قبل استدعاء done() ، ومع ذلك لا يظهر الناتج مع --forceExit . عند إزالة --forceExit ، يتم عرض مخرجات console.log في النهاية.

Test Suites: 1 passed, 1 total
Tests:       35 skipped, 1 passed, 36 total
Snapshots:   0 total
Time:        2.512s
Ran all test suites matching /test\/api.test.js/i.
  console.log test/api.test.js:247
    bar

إذن ، أليس الحل الواضح هنا قبل الخروج من التدفق مهما كانت مزحة المخزن المؤقت للإخراج داخليًا؟

لدينا حالة اختبار لذلك: https://github.com/facebook/jest/blob/497be7627ef851c947da830d4a8e21046f847a78/integration-tests/__tests__/console_log_output_when_run_in_band.test.js#L24 هل هو خاطئ بطريقة ما؟

هل يمكن لأي شخص أن يقوم بإعداد إعادة استنساخ يمكننا إلقاء نظرة عليه؟

إضافة سريعة: يبدو أن jest --no-cache يعني أيضًا عدم ظهور console.logs.

مع Node 9.7.1 ، و jest 22.4.2 مع babel 7 باستخدام مطول يبدو أنهما يعملان بشكل جيد لعرض سجلات وحدة التحكم من داخل الاختبارات:

package.json

"dependencies": {
  ...
},
"jest": {
  "verbose": true
}

لقد مر بعض الوقت لأن هذا لم يتطلب تدخل المستخدم ، ولكن يبدو أن العلاج كان ثابتًا.

لقد كانت هذه المشكلة تزعجنا أيضًا لبعض الوقت الآن ، أولاً مع اقتطاع الإخراج بشكل عشوائي ، والآن يتم تجاهل الإخراج تمامًا. لإعادة الإنتاج ، قم باستنساخ فرع dev / dexie-search-index لهذا الريبو:
[email protected] : WorldBrain / Memex.git

أضف هذا السطر في مكان ما في insertTestData () في src / search / index.test.ts:
console.log('!?!?!?!!?!?!!?'); expect(1).toBe(2)

تم الاختبار مع الإصدارين 6.11 و 8.10 من Node.js. الرجاء حل هذا في أسرع وقت ممكن ، لأنه يجعل الترميز أبطأ كثيرًا :(

تضمين التغريدة لقد قمت بتعيين verbose: "false" وهو يعمل.

عثرت بالأمس على هذه المشكلة https://github.com/evanw/node-source-map-support/issues/207 وبدت مشابهة إلى حد كبير لهذه المشكلة هنا.

سبب هذه المشكلة هو أن عمليات الكتابة إلى process.stdout في Node.js تكون أحيانًا غير متزامنة وقد تحدث عبر علامات التجزئة المتعددة في حلقة الحدث Node.js. ومع ذلك ، فإن استدعاء process.exit () يجبر العملية على الخروج قبل أن يتم تنفيذ عمليات الكتابة الإضافية إلى stdout.

https://nodejs.org/api/process.html#process_process_exit_code

لم أتحقق من الكود ، ولكن إذا تم استخدام process.exit() مع --forceExit ، فسوف يفسر ذلك سبب اختفاء مخرجات السجل.

أضفت للتو حلاً نجح معي في هذه المشكلة ذات الصلة: https://github.com/facebook/jest/issues/3853#issuecomment -375183943

ledbit هذا لم ينجح بالنسبة لي. يا له من قضية امتدت لعام ونصف ولم تحل بعد.

هذا صحيح ، لكن لا يزال هناك الكثير مما يمكن للمطورين أن يستمروا فيه.

لقد وجدت هذه المشكلة الأكثر شيوعًا في مكالمة متداخلة غير متزامنة ضمن مثال غير متزامن. لست متأكدًا تمامًا من الحالة مع أي شخص آخر ، ولكن إظهار استخدامه لـ console.log سيكون بالتأكيد مفيدًا في حل هذه المشكلة.

إنه يحدث بالتأكيد بالنسبة لي. ماذا تحتاج مني لتصلحه؟

في 22 آذار (مارس) 2018 ، الساعة 8:32 صباحًا ، كتب دينيس براون [email protected] :

هذا صحيح ، لكن لا يزال هناك الكثير مما يمكن للمطورين أن يستمروا فيه.

لقد وجدت هذه المشكلة الأكثر شيوعًا في مكالمة متداخلة غير متزامنة ضمن مثال غير متزامن. لست متأكدًا تمامًا من الحالة مع أي شخص آخر ، ولكن إظهار استخدامه لـ console.log سيكون بالتأكيد مفيدًا في حل هذه المشكلة.

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم بعرضها على GitHub https://github.com/facebook/jest/issues/2441#issuecomment-375349444 ، أو كتم صوت الموضوع https://github.com/notifications/unsubscribe-auth/ADrayIO4NBB2dZM1XL8ZQO32W9SUnu2Yks5tg8Q4 .

الأفضل من ذلك ، اذهب لذلك! هنا الريبو الخاص بي. https://github.com/RALifeCoach/handandfootserver.git

تشغيل jest من npm أو تشغيل من سطر الأوامر. سترى أن هناك العديد والعديد من سجلات وحدة التحكم ، لكن معظمها مغطاة.

هناك - يمتلك فريق التطوير كل ما يحتاجونه. الرجاء إصلاح هذه المشكلة.

في 22 آذار (مارس) 2018 ، الساعة 8:36 صباحًا ، كتب كريستوفر أوليفانت أوليفانت.

إنه يحدث بالتأكيد بالنسبة لي. ماذا تحتاج مني لتصلحه؟

في 22 آذار (مارس) 2018 ، الساعة 8:32 صباحًا ، كتب دينيس براون < [email protected] [email protected] >:

هذا صحيح ، لكن لا يزال هناك الكثير مما يمكن للمطورين أن يستمروا فيه.

لقد وجدت هذه المشكلة الأكثر شيوعًا في مكالمة متداخلة غير متزامنة ضمن مثال غير متزامن. لست متأكدًا تمامًا من الحالة مع أي شخص آخر ، ولكن إظهار استخدامه لـ console.log سيكون بالتأكيد مفيدًا في حل هذه المشكلة.

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم بعرضها على GitHub https://github.com/facebook/jest/issues/2441#issuecomment-375349444 ، أو كتم صوت الموضوع https://github.com/notifications/unsubscribe-auth/ADrayIO4NBB2dZM1XL8ZQO32W9SUnu2Yks5tg8Q4 .

RALifeCoach بالنظر إلى الريبو الخاص بك الآن ، هناك قدر كبير من التسجيل هناك. هل تمانع في الإشارة إلى التسجيل الذي تفتقده على وجه الخصوص؟

شغلها. سترى بعض المخرجات ، ولكن تم الكتابة فوق الكثير.

يوم السبت 14 أبريل 2018 الساعة 3:10 صباحًا Simen Bekkhus [email protected]
كتب:

RALifeCoach https://github.com/RALifeCoach ينظر إلى الريبو الخاص بك الآن ،
هناك قدر كبير من التسجيل هناك. مانع مشيرا إلى أي تسجيل الدخول
على وجه الخصوص كنت في عداد المفقودين؟

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

لست متأكدًا مما تقصده بالكتابة. هو شيء الإخراج إلى وحدة التحكم ثم مسح؟

إذا تمت كتابة ستة سطور باستخدام console.log ، فستظهر الستة لفترة وجيزة وبعد ذلك
يتداخل ملخص الاختبار مع بعض الأسطر الستة.

يوم السبت 14 أبريل 2018 الساعة 8:58 صباحًا Simen Bekkhus [email protected]
كتب:

لست متأكدًا مما تقصده بالكتابة. هو شيء الإخراج إلى
ثم مسح وحدة التحكم؟

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

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

يبدو أن هذا لا يزال يمثل مشكلة ، حتى على العقدة 8.11.1. ربما يجب علينا تقديم خطأ جديد والرجوع إليه هنا؟

لا تزال تواجه نفس المشكلة في العقدة v8.9.0.

يمكنني تأكيد تعليق RALifeCoach حول "الكتابة فوق" إخراج السجل - أخيرًا حصلت على السجلات لتظهر من خلال وضع علامات على كل منها بسلسلة معينة من الأحرف (على سبيل المثال @@@ ) وتشغيلها:

yarn test --verbose | grep '@@@'

إنه اختراق رهيب (تفقد كل ألوان وحدة التحكم ، لكنك لا تزال ترى إخفاقات في الاختبار وملخص اختبار نهائي) ولكنه الشيء الوحيد الذي نجح حتى الآن. لقد جربت كل شيء آخر في التعليقات أعلاه. لاحظ أن --verbose arg ضروري لهذا الحل (ويتم دمجه ضمنيًا مع --watch عبر react-scripts ).

[استخدام متشعب react-scripts لاستخدام أحدث إصدار من Jest v23.0.0 ، العقدة v8.11.2]

يساعد إعداد "verbose": true في package.json. تظهر السجلات في الجزء السفلي من الإخراج.

رجل لقضية مغلقة ما زلت أشاهد الناس يشكون من هذا منذ إنشائه قبل عامين.

أعتقد أن هناك بعض التعليمات البرمجية في Jest التي تضحك علينا و "hijacks" console.log () ،
جعله في حالة عدم وجود ، شيء مثل ...

console.log = function(){ /* do nothing */}

من المفارقات أن علاج إعادة تعيين console.log - راجع https://stackoverflow.com/questions/7089443/restoring-console-log
- لحذف console.log

delete console.log
console.log("Can you hear me now, Jesters...?");

... وفجأة - فويلا! - مثل العنقاء من اللهب - console.log() يعمل مرة أخرى في Jest ...!
Jest حتى يطبع "console.log (معلومات الموقع)" قبل تسجيل رسالتك ...

>

console.log __tests __ \ libarray-helpers.test.js: 35
هل تسمعني الآن يا جيسترز ...؟

أيضًا ، كنت أستخدم "logatim" متماثل الشكل مؤخرًا https://www.npmjs.com/package/logatim بدلاً من console.log () ،
يبدو محصنًا من محاولات Jest للاختطاف ... (ربما يعيد تعيين console.log ...)

يمكنك حتى "اختطاف" console.log بنفسك بشكل استباقي مقابل logatim
لتسجيل رسالة مستوى "معلومات" باللون الأخضر ...

// const logatim = require('logatim') // ES5
import logatim from 'logatim' // ES6
/* ... */
console.log = function(...args){ logatim.green.info("[INFO]",...args) } // ES6

(من فضلك لا تفسر مزاحتي على أنها عدوانية ... أين الفرح في تسمية منتج جيد Jest إذا كنت لا تستطيع المزاح بشأنه قليلاً ...)

قبل نشر الكراهية @ yanshuf0 ، ضع في اعتبارك الأدوات المجانية والمفتوحة التي تستفيد منها بوضوح. لقد اخترت استخدام Jest. إذا لم تعجبك ، يمكنك اختيار المغادرة (أو إصلاح الأمر بنفسك ، الفريق ودود ومنفتح على العلاقات العامة).

كنت أواجه مشكلة "الكتابة فوق" (Windows 10 ، VS Code Terminal ، مشروع node.js) وبعد ذلك عندما كنت أعاني من ذلك ، توقف الخطأ. اعتقدت أنه توقف لأنني توقفت عن استخدام --watch أو لأنني أضفت خيارًا "verbose": false ، لكن التراجع عن هذه التغييرات لم يجعل الخطأ يعود.

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

--watchAll العلم منعت عليه. الآن يعمل بالنسبة لي

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

العثور على نفس المشكلة هنا ، شكرًا للإصلاح المؤقت

يمكن أن تؤكد أن هذه مشكلة في كل من 22.4.4 و 23.4.1 (الحالية اعتبارًا من هذا التعليق). العلامات التي أستخدمها هي:

$ jest --forceExit --runInBand --bail --ci --json --outputFile=/tmp/jest_results.json

واقترح موضوع آخر حول نفس الموضوع إضافة الخيار --json ، والذي نجح لفترة من الوقت ... ربما تغيرت بعض التبعية منذ ذلك الحين ، لكن إخراج STDOUT و STDERR يتم منعهما دائمًا . أقرب شيء حصلت عليه هو استخدام --watch ؛ في بعض الأحيان قد يتم وضع بعض المخرجات في النهاية دون الكتابة فوقها.

لقد وجدت أن --silent هو true افتراضيًا ، فاضبطه على false وسوف ينتج وحدة التحكم: jest --silent=false

يبدو أنه لا يزال هناك الكثير من التقارير حول هذا الأمر ، من الواضح أن شيئًا ما لا يزال مكسورًا. تم إغلاق هذا كخداع رقم 2166 الذي تم إغلاقه الآن ، ولكن هذا لا يزال قائما.

thymikee هل يمكننا إعادة فتح هذه المشكلة؟

أنا أعيد فتح هذا ، لأن المشكلة عادت جزئيًا ونحتاج إلى إصلاحها.

في الإصدار 23 ، تظهر المشكلة في وضع المراقبة ، نظرًا لأننا قمنا بتغيير طريقة عملها تحت غطاء المحرك لإجراء اختبارات متوازية دائمًا تقريبًا ، لذلك لا يتم حظر TTY ويمكن للمرء إلغاء الاختبارات طويلة المدى بسهولة: https: // github. كوم / فيسبوك / دعابة / سحب / 6647.
الحالة الوحيدة التي لا ننتج فيها العمال في وضع المشاهدة هي عندما يكون لدينا اختبار واحد بالضبط للتشغيل ويكون سريعًا نسبيًا (يعمل أقل من 1 ثانية) - في هذه الحالة لا يزال يتعين علينا رؤية console.log s يظهر كما هو الحال دائمًا.

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

حسب تعليق davidgilbertson (https://github.com/facebook/jest/issues/2441#issuecomment-286248619) إزالة verbose: true في package.json وإزالة --verbose من بلدي تتيح لي علامات سطر الأوامر عرض سجلات وحدة التحكم التي كانت مخفية بخلاف ذلك. هذا محير جدا.

لديّ verbose: true في مجموعتي.json وأجد أن كشوفات الحساب console.log موجودة في بعض الأحيان وأحيانًا لا تظهر (إذا كان لدي 10 في مجموعها معًا يبدو أنها تظهر ، لكن لا لواحد فقط) - أعتقد أن هذه ربما تكون مشكلة غير متزامنة

لدي هذه المشكلة أحيانًا أيضًا ، فأنا أقوم بتمكين runInBand (https://jestjs.io/docs/en/cli.html#runinband) وهذا يعمل على إصلاحها.

ndelangen هذا فضولي - أتساءل عما إذا كانت مشكلة غير متزامنة إذن. اعتقدت أن Jest جمع كل console.logs ثم طباعتها في النهاية ، أليس كذلك؟

المشكلة تتكرر الآن على الرغم من أنني لا أستخدم verbose .

--runInBand لا يصلح لي. الحل الوحيد الموثوق به حتى الآن هو مجرد تسجيل شيء ما عدة مرات حتى لا يتم الكتابة فوق بعض المخرجات بواسطة الدعابة.

لقد أجريت بعض التحليلات وأضفت بعض التعليقات وتمكنت من إنشاء تصحيح جزئي هنا:

https://github.com/facebook/jest/issues/3853#issuecomment -413622844

تعديل:

يتوفر الريبو الذي يحتوي على رمز لإعادة الإنتاج بسهولة هنا: https://github.com/spion/jest-logging-repro

تحليل الناتج هنا: https://gist.github.com/spion/bbb34c5abc1230a37ad5f4f01336b8df

التصحيح جزئي بسبب

  • فشل الكثير من اختبارات التكامل الآن بسبب التغييرات الضرورية في الإخراج
  • أحيانًا (لسوء الحظ) يظهر إخراج السجل بعد آخر تحديث للحالة - ربما يكون السبب هو حقيقة أن تدفقات العملية الفرعية يتم مسحها بعد أن ترسل العملية الفرعية رسالة النجاح إلى الوالد.

philraj نفس المشكلة بالنسبة لي .. لا بد لي من تسجيل الدخول عدة مرات لرؤية رسالة السجل المقصودة بشكل موثوق

كيف لا يكون هذا مصدر قلق كبير ولا يتم حله في أسرع وقت ممكن؟ كيف يتم فتح هذه القضية منذ 2016 ؟؟

تحديث: باستخدام هذا التصحيح ، وصلت إلى 8 اختبارات فاشلة فقط:

diff --git a/packages/jest-runner/src/index.js b/packages/jest-runner/src/index.js
index 2f4dd724..618a8cbf 100644
--- a/packages/jest-runner/src/index.js
+++ b/packages/jest-runner/src/index.js
@@ -97,11 +97,14 @@ class TestRunner {
     // $FlowFixMe: class object is augmented with worker when instantiating.
     const worker: WorkerInterface = new Worker(TEST_WORKER_PATH, {
       exposedMethods: ['worker'],
-      forkOptions: {stdio: 'inherit'},
+      forkOptions: {stdio: 'pipe'},
       maxRetries: 3,
       numWorkers: this._globalConfig.maxWorkers,
     });

+    worker.getStdout().pipe(process.stdout);
+    worker.getStderr().pipe(process.stderr);
+
     const mutex = throat(this._globalConfig.maxWorkers);

     // Send test suites to workers continuously instead of all at once to track
diff --git a/packages/jest-worker/src/worker.js b/packages/jest-worker/src/worker.js
index 5eee64af..17d76d36 100644
--- a/packages/jest-worker/src/worker.js
+++ b/packages/jest-worker/src/worker.js
@@ -87,6 +87,13 @@ export default class {
   }

   _initialize() {
+    const forceColor =
+      'FORCE_COLOR' in process.env
+        ? process.env['FORCE_COLOR']
+        : // $FlowFixMe: Does not know about isTTY
+          process.stdout.isTTY
+          ? '1'
+          : '0';
     const child = childProcess.fork(
       require.resolve('./child'),
       // $FlowFixMe: Flow does not work well with Object.assign.
@@ -94,6 +101,7 @@ export default class {
         {
           cwd: process.cwd(),
           env: Object.assign({}, process.env, {
+            FORCE_COLOR: forceColor,
             JEST_WORKER_ID: this._options.workerId,
           }),
           // Suppress --debug / --inspect flags while preserving others (like --harmony).

إنهم يدورون بشكل أساسي حول عدم توقع FORCE_COLORS في process.env و hg scm و packages/jest-runner/src/__tests__/test_runner.test.js لا يسخرون تمامًا من التدفقات (لذلك لا توجد طرق أنابيب عليها.

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

كما قال bkempner ، فإن استخدام --watch --verbose false يصلح المشكلة.

إخراج وحدة التحكم في --watch يتم استبداله من خلال تحريك المؤشر المزاح مع ما أراه. حضور / غياب --verbose ، --maxWorkers 1 ، --runInBand لا ينتج عنه نجاح.

الحل الحالي هو jest --watch | cat . أفقد كل الألوان وأبقى في الجزء العلوي من النافذة ، لكني أحصل على إخراج وحدة التحكم.

أو TERM=dumb jest --watch . أفقد البقاء في الجزء العلوي من النافذة ، لكني أحصل على اللون وإخراج وحدة التحكم.

كان لي نفس المشكلة.

ما نجح بالنسبة لي هو استخدام console.debug

TERM=dumb يصلح لي أيضًا

FWIW ، TERM = إصلاحات غبية بالنسبة لي أيضًا

تعطيل verbose في تكوين jest يعمل بالنسبة لي 0_o \

أدت إضافة --verbose false إلى البرنامج النصي "test" الخاص بـ package.json إلى حل المشكلة بالنسبة لي. لم أكن لأجد ذلك بدون هذا الموضوع.

على سبيل المثال

"scripts": {
    "test": "jest --watch --verbose false"
}

غريب كيف تختفي بعض وحدات التحكم الأخيرة ولكن ليس جميعها ، فقد أصلحتها بـ --verbose false في أمر ساعتي.

يعمل بشكل جيد عند الجري بدون --watch لذا فهو شيء يتعلق بعلامة الساعة التي تقوم بذلك.

الأمر المثير للسخرية هو أن الأمر أكثر استطالة عندما يعمل console.log!

لقد بدأت في ملاحظة هذه المشكلة مع مطول في Jest 23.6 ، عدت إلى 23.5 وما زلت أرى ذلك. إذا قمت بتشغيل --clearCache هذه الإصلاحات مطولة لفترة من الوقت حتى تفشل مرة أخرى. ليس من الواضح ما هو المشغل ، مثل الكثير من حالات فشل السجل أو شيء ما على طول هذا الخط. بمجرد حدوث ذلك ، يبدو أنه يتسبب في إتلاف Jest لذاكرة التخزين المؤقت. أحاول استخدام --verbose false ومعرفة ما إذا كان ذلك يمنعه من المضي قدمًا.

شكرًا jamespolanco باستخدام الخيار --clearCache إصلاح المشكلة بالنسبة لي (في الوقت الحالي). سأقوم بإجراء اختباراتي باستخدام الخيار --no-cache ومعرفة ما إذا كان ذلك يمنع تكرار المشكلة في المستقبل.

تحرير: كان يجب أن أذكر أن مشكلتي كانت أنه تمت طباعة بعض رسائل console.log فقط. لقد استخدمت 5 خطوط console.log في اختبار واحد ولم تتم طباعة سوى الأسطر الثلاثة الأولى. أدى استخدام --clearCache إصلاح هذه المشكلة بالنسبة لي. ربما هناك مشكلة مختلفة حيث لا يظهر console.log

أنا أعاني من هذه المشكلة أيضا. لقد حاولت استخدام خطأ console.log و console.debug و console. لقد حاولت أيضًا استخدام علامة - no-cache. في جميع الحالات ، يتم تجاهل بيان وحدة التحكم الخاص بي تمامًا.

أواجه هذه المشكلة في وضع الساعة أيضًا. الإصدار 23.6.0

حتى أنني سجلته إذا كان أي شخص يحب أن يرى بنفسه:
asciicast

مثل الآخرين - يتم محوه فقط عند الجري بـ --watch . حاولت --verbose false ولم يساعد ذلك.

أنا أيضا أواجه نفس المشكلة.

أواجه هذا أيضًا عند استخدام الإسهاب أو عندما أكون في وضع المشاهدة

صدق أو لا تصدق أنا أسجل أحيانًا إلقاء خطأ. يؤدي أيضًا إجراء node --inspect node_modules/.bin/jest --runInBand mypath/to/my.test.js إلى إظهار المخرجات الحقيقية console.log في حالتي.

العقدة v9.11.1
دعابة: v23.6.0

تكوين Jest في package.json :

  "jest": {
    "preset": "react-native",
    "verbose": true,
    "testEnvironment": "node",
    "haste": {
      "defaultPlatform": "android",
      "platforms": [
        "android",
        "ios",
        "native"
      ],
      "providesModuleNodeModules": [
        "react-native"
      ]
    },
    "setupFiles": ["<rootDir>/__tests__/setup"]
  },

أؤكد أن هذه المشكلة مطولة. تكمن المشكلة في تعطل حساب عدد الأسطر عند تشغيل الإسهاب.

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

يمكنك تخفيف الإصدار باستخدام jest-watch-toggle-config في الوقت الحالي.

قم بإعداده على النحو التالي:

module.exports = {
  "watchPlugins": [
    ["jest-watch-toggle-config", { "setting": "verbose" }]
  ]
}

عند تشغيل اختبارك ، اضغط على v لتمكين الإسهاب ثم اضغط على v v مرة أخرى لتعطيله .

بعد ذلك ، ما دمت مطولًا ، يمكنك رؤية جميع السجلات.

--verbose=false بإصلاح المشكلة بالنسبة لي عند اختبار الإنزيم الضحل . على الرغم من ذلك ، كانت console.logs تعمل بدون إصلاح لتركيب الإنزيم .

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

لمعلوماتك ، يعمل هذا العلاقات العامة على إصلاح المشكلة بالنسبة لي - https://github.com/facebook/jest/pull/6871

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

لم يتم تحديثها بعد (تشغيل jest 22.4.2) ولكن باستخدام وضع المشاهدة ، لن تظهر سجلاتي. الجري بـ --runInBand إصلاحه في وضع المشاهدة.

    "test": "jest --watch --runInBand",
    "test:once": "jest",

لم أقم بتحديث أيًا من (Jest 23.6.0) ، كما أن التشغيل باستخدام "jest --watch --verbose = false" يعمل على إصلاحه لي أيضًا.

أحب الأشخاص الذين يواجهون مشاكل في اختبار العلاقات العامة المذكورة أعلاه. إنه متاح بـ jest@beta ( 24.0.0-alpha.9 الآن)

حتى الغزل إضافة الدعابة @ بيتا؟

الإضافات. 19. des. 2018 ك. 16:46 سكريف سيمين بكهوس [email protected] :

أحب الأشخاص الذين يواجهون مشاكل في اختبار العلاقات العامة المذكورة أعلاه. إنه
متوفر في jest @ beta (24.0.0-alpha.9 الآن)

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

>


تارجي هيوز
موبايل: 920 63413

tarjei ، نعم:

yarn add --dev jest<strong i="7">@beta</strong>

انها تعمل بالنسبة لي. 🎉

هذا سخيف حقًا ولكن في حالة مساعدة أي شخص آخر ، فأنا أعمل في مشروع جديد (بالنسبة لي) - كان المزاح يعمل مع الخيار --silent الذي يعطل الإخراج. تمت إزالة ذلك وأنا أرى السجلات الآن 🤦‍♂️

لاحظ عند تمكين الإسهاب (قمت بالتبديل باستخدام jest-watch-toggle-config ) ، يتم حظر بعض سجلات وحدة التحكم في الإصدار التجريبي.

- الإسراف = خطأ

هذا عمل لي.

لقد لاحظت أن بعض console.log() حيث كان يعمل بينما لم يعمل الآخرون في اختباراتي (العقدة v8 ، [email protected])

const something = () => new Promise(resolve => {
  console.log('NOT logged for some reason!')
  setTimeout(resolve, 100);
});

describe('Something', () => {
  it('logging works in non-async test', function () {
    console.log('logged 1')
    console.log('logged 2')
    expect(true).toBe(true);
  });

  it('console log does not work well in async test', async () => {
    console.log('logged 3')
    await something();
    console.log('NOT logged!')
    expect(true).toBe(true);
  });
});

/* Output:
> logged 1
> logged 2
> logged 3
*/

هناك شيء غريب للغاية يحدث ، مع اختبارات async حيث لم يتم تسجيل أول console.log في اختبار غير المتزامن ، وكذلك الاختبار بعد await لم يتم تسجيله.

أضف المزيد من console.log في هذا الاختبار async وستبدأ في ملاحظة سلوك أكثر غرابة مثل بعض السجلات بعد عمل await فجأة 🤷‍♀️ 🤷‍♂️

لذا ، ما كتبه philwhln أعلاه قبل عامين

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

يبدو أن لديها بعض الحقيقة في ذلك.

- الإسراف = خطأ

عملت أيضا بالنسبة لي في هذه الحالة.

DanweDE هل يمكنك التحقق مما إذا كان أحدث إصدار من alpha yarn add jest<strong i="6">@beta</strong> --dev يصلح المشكلة لك ، حتى مع التعيين المطول على true ؟

أدت إضافة --verbose false إصلاح المشكلة. هذا يبدو غير بديهي بعض الشيء :)

هل هذا ثابت؟ ما زلت لا أرى أي سجلات console.log على "jest": "23.6.0"

iDVB إذا كنت تقرأ إصدارًا تجريبيًا من المفترض أن يحل المشكلة. جرب ذلك وأبلغ عما إذا كان يحل مشكلتك لمساعدة

أيضًا كل من يأتي إلى هنا ليقول --verbose false أو --verbose true أو أي مجموعة من الأعلام أو إصدارات Node أو Jest قاموا بإصلاح مشكلتهم ، يرجى تجربة الإصدار التجريبي والإبلاغ عما إذا كان يعمل على إصلاح مشكلتك دون الحل البديل.

تظهر سجلات وحدة التحكم في الفصول التي أختبرها

philraj لقد انتقلنا إلى الإصدار التجريبي "24.0.0-alpha.9" في leaplabs وهو يعمل بشكل لا تشوبه شائبة. بمعنى أنني لم أر أي سجلات تختفي منذ أن قمنا بالترقية.

يمكن التأكيد أيضًا ، يعمل على 24.0.0-alpha.9 بدون أي أوامر سطر أوامر.

أنا جديد نسبيًا على React and Jest. لم أتمكن من الحصول على سجلات متسقة باستخدام الإعدادات الافتراضية من تطبيق create-react-app. قمت بإخراجها والآن تعمل السجلات بشكل جيد. لا أعتقد أن الإخراج غيرت نسخة Jest. ربما غيّر هذا للتو أحد الإعدادات الخاصة بكيفية تشغيل Jest. هذا مع 23.6.0 .

عند استخدام 24.0.0-alpha.16 لا أرى أي من سجلات وحدة التحكم إلا إذا أضفت verbose=false .

أحصل على نتائج غير متسقة مع هذا أيضًا على [email protected]. إذا قمت بالتشغيل في وضع الساعة (أ) ، فيمكنني رؤية إخراج وحدة التحكم ، ولكن ليس إذا قمت بتشغيل التغييرات ذات الصلة في وضع المشاهدة (س)؟

أصلح لي --verbose=false هذا أيضًا 🎉

أنا أستخدم 24.1.0 وهو يعمل حتى بدون خيار الإسهاب. ومع ذلك ، فإنه لا ينتج أي بيانات console.log في ملف الاختبار عندما يحتوي ملف الاختبار على مثل. إشارة إلى فئة ، التي لم يتم استيرادها. فمثلا

image

هذا خطأ من ts-jest وليس له صلة هنا حقًا

نعم ولكن عند حدوث هذا الخطأ ، لا يتم عرض إخراج سجل وحدة التحكم. ألا يزال هذا مناسبًا لـ ts-jest ؟ لست معتادًا على مسؤولية كل مكتبة حول الدعابة.

IDK كيف يعمل ts-jest ، ولكن إذا لم يتم تشغيل أي اختبارات لأخطاء النوع ، فإن ذلك يفسر سبب فقدهم - لا يتم تشغيل الكود مطلقًا

ما زلت أعاني من أجل الحصول على console.log للعمل هنا. أحصل على سجلات من حين لآخر ولكن يبدو أنه لا يوجد نمط واضح للنجاح.

أنا أستخدم Jest 24.7.1 وحاولت أيضًا 24.7.1 و 24.2.0-alpha.0 .

فشل تعيين verbose=false و verbose=true في توفير الإصلاح.

لقد حاولت أيضًا استخدام العقدة v10.8.0 و v6.17.1 ، أيضًا بدون إصلاح.

هل هناك أي شيء مفقود هنا؟

mulholio هل أنت متأكد بنسبة 100٪ أنك تقوم بتشغيل مزحة مثبتة محليًا؟ لقد أبلغت عن مشكلات في الماضي حدثت فقط لأن لدي إصدارًا عالميًا قديمًا من الحزمة التي كانت تعمل بدلاً من النسخة المثبتة محليًا.

نعم ، لم يتم تثبيت إصدارات عالمية من Jest

أستطيع أن أؤكد أنه لم يتم حلها. يعمل أحيانًا console.log وأحيانًا لا يعمل ، كم هذا يربكني.
بيئتي على النحو التالي:
دعابة 23.6.0
عقدة v8.13.0
و jest.config.js الخاص بي

const path = require('path');

module.exports = {
  moduleNameMapper: {
    "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
    "\\.(less|css|scss)$": "<rootDir>/__mocks__/cssMock.js",
    "^@\/(.*)$": "<rootDir>/src/client/$1",
  },
  bail: true,
  setupTestFrameworkScriptFile: "<rootDir>/setupTests.js",
  collectCoverageFrom: [
    "src/client/**/*.{js,jsx}",
  ],
  verbose: true,
  coverageReporters: ["text", "text-summary", "lcov", "json"],
  coveragePathIgnorePatterns: ["src/client/index.js"],
}

نعم ، بعد الإزالة المطولة: صحيح ، يبدو جيدًا

أرى أيضًا هذا الخطأ ، هل يمكننا إعادة فتح هذه المشكلة؟

لمعلوماتك: إذا استخدمت fit لإجراء اختبار واحد ، فلن ينتج عن console.log s أي شيء. عندما أجريت مجموعة كاملة من الاختبارات ، عملت console.log s على ما يرام.

عند مواجهة نفس المشكلة ، يتم "التهام" بعض سجلات وحدة التحكم. بالنسبة لأولئك الذين يواجهون هذه المشكلة ، هل يمكنك التحقق ولكن استنساخ سجلات وحدة تحكم متعددة؟

console.log('ok');
console.log('ok');
console.log('eaten up');

يبدو أن المخزن المؤقت لعبارة [PASS] يكتب على آخر سطرين من سطور سجل وحدة التحكم (يمكنني رؤية جزء من رقم سطر سجل وحدة التحكم في نهاية عبارة المرور)

+1000

يبدو سخيفًا حقًا ولكن تأكد من حصولك على yarn build قبل الاختبارات!

لا يزال لا يوجد ناتج مع --verbose=true أو --verbose=false عند استخدام [email protected] - لست متأكدًا من سبب استمرار المشكلة بعد 3 سنوات من تسجيلها في الأصل.

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

شكرا ، إنه يعمل! ولكن لماذا لا يتم تعيينه بشكل افتراضي للحصول على إخراج console.log ..

لا تزال هذه مشكلة بالنسبة لي ، [email protected]

لقد وجدت إصلاحًا في الواقع ، تم تجاوز آخر سطرين في آخر اختبار (متتالي) ، لذا اجعل هذه آخر حالة اختبارية لك

it('bugfix for [email protected]', () => {
  console.log("[email protected] bug|last 2 lines get override. remove this once 24.8.0 gets fixed");
  console.log("[email protected] bug|last 2 lines get override. remove this once 24.8.0 gets fixed");
});

بالنسبة لأولئك الذين يستخدمون ts-jest ، اضطررت إلى إيقاف تشغيل التشخيص لرؤية console.logs
jest.config.js

  globals: {
    'ts-jest': {
      diagnostics: false,
    },
  },

بالنسبة لأولئك الذين يستخدمون ts-jest ، اضطررت إلى إيقاف تشغيل التشخيص لرؤية console.logs
jest.config.js

  globals: {
    'ts-jest': {
      diagnostics: false,
    },
  },

هذا الخيار لم يعمل بالنسبة لنا. لقد حاولنا أيضًا تعيين verbose = false والذي لم يساعد أيضًا.

بيئتنا:

  • العقدة 10.16.0
  • jest 24.8.0
  • ts-jest: 24.0.2
  • نسخة مطبوعة 3.5.2
  • @ أنواع / دعابة 24.0.15

يبدو أن المخزن المؤقت لعبارة [PASS] يكتب على آخر سطرين من سطور سجل وحدة التحكم (يمكنني رؤية جزء من رقم سطر سجل وحدة التحكم في نهاية عبارة المرور)

يبدو أن هذا هو الحال بالنسبة لي ([email protected]). في نظامي ، يظهر خط الإخراج الطرفي مع [PASS] ليومض بعض المحتوى قبل مسحه.

تعاني من هذه المشكلة أيضا.

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

expect(thingIWantToLog).toBe({})

ركض في هذا أيضًا: يبدو أن إخراج "PASS: ..." يقوم بالكتابة فوق stdout ، لذلك سيتم التخلص من "آخر" console.log.

إذا لم يعمل --verbose=false ، فيمكنك إضافة مجموعة من الأسطر الجديدة القربانية ( \n ) إلى آخر مدونة.

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

ساعدت إضافة هذه العلامة في فرز المشكلة.
من وقت لآخر لم يكن يظهر أيضًا مخرجات console.log.
باستخدام هذا الأمر:
npm test -- --verbose --runInBand -t "My Test Name"

إصدارات Node و NPM:
node v8.16.0
npm 6.4.1

هذا هو حل عملي:

تثبيت npm - save-dev sprintf-js

في دعوتك setupTest.js ، أو في أي مكان:

import {sprintf} from 'sprintf-js';

console.log = (msg, args) => {
    const str = sprintf(msg, args);
    process.stderr.write(str + '\n');
  };

لا يزال لا يوجد ناتج مع --verbose=true أو --verbose=false عند استخدام [email protected] - لست متأكدًا من سبب استمرار المشكلة بعد 3 سنوات من تسجيلها في الأصل.

هذا هو jest.config.js وقد نجح معي.
jest -v 23.6.0 & node -v 8.11.2

module.exports = {
  clearMocks: true,
  moduleDirectories: [
    'node_modules',
  ],
  testEnvironment: 'node',
  testMatch: [
    '**/__tests__/**/*.js?(x)',
    '**/?(*.)+(spec|test).js?(x)',
  ],
  verbose: false,
};

ثم في package.json لدي:

"scripts": {
  "test": "jest --config ./jest.config.js",
}

ثم قم بتشغيل مجموعة الاختبار الخاصة بك باستخدام هذا الأمر:

yarn test -- -t 'test-suite-name-here'

--verbose=false قد نجح معي. شكرا!

قم بإخفاء السجلات والتحذيرات عندما تمرر الخيار --silent
جرب yarn jest يجب أن يعمل

هذا الخطأ مزعج جدا ... 3 سنوات ...

إيقاف - صامت
ولاختبارات ts باستخدام حل ts-jest @ mr-madamin الذي يعمل معي!

عدم استخدام verbose أو silent ، لقد جربت --runInBand ، TERM=dumb ، تشغيل كل الاختبارات في مقابل ملف اختبار واحد ، و console.log يظهر عند تم وضعها في كتل الإعداد ولكن ليس ضمن كتل it() .

عندما يفشل كل شيء آخر ، يجب أن تظل قادرًا على القيام بما يلي:

require('fs').writeFileSync('./output', data);

لكني أشعر كأنني رجل الكهف يستخدم حجرًا لكسر حبة الفول السوداني.

تحرير: "jest": "^24.9.0"

أنا أستخدم هذا الأمر وهو يعمل:

npm test -- --runInBand -t "My Test Name"

يمكنك تحديد اسم الاختبار الخاص بك بعد العلامة -t لتشغيل الاختبارات الفردية أو مجموعات الاختبار تحت نفس الوصف () .

عدم استخدام verbose أو silent ، لقد جربت --runInBand ، TERM=dumb ، تشغيل كل الاختبارات في مقابل ملف اختبار واحد ، و console.log يظهر عند تم وضعها في كتل الإعداد ولكن ليس ضمن كتل it() .

عندما يفشل كل شيء آخر ، يجب أن تظل قادرًا على القيام بما يلي:

require('fs').writeFileSync('./output', data);

لكني أشعر كأنني رجل الكهف يستخدم حجرًا لكسر حبة الفول السوداني.

تحرير: "jest": "^24.9.0"

لقد كنت متحمسًا للبدء أخيرًا في استخدام المزاح على الواجهة الخلفية للتوحيد. بدلاً من ذلك ، أواجه هذه المشكلة واعتبارًا من الآن أعود إلى mocha / proxyquire. لا يوجد مخرجات console.log مرئية (في الوحدات النمطية أو حالات الاختبار) وبعد قضاء عدة ساعات عليه ، لا يبدو أن أيًا من الحلول قد يساعد. لست مهتمًا بأي حلول بديلة تتضمن تسجيل الدخول إلى الملفات ...

تم الاختبار على العقدة 8/10 LTS "jest": "^24.9.0",

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

مرحبًا samlevin و Pavelloz ،
هل جربت هذا الخيار؟

أنا أستخدم هذا الأمر وهو يعمل:
npm test -- --runInBand -t "My Test Name"

يمكنك تحديد اسم الاختبار الخاص بك بعد العلامة -t لتشغيل الاختبارات الفردية أو مجموعات الاختبار تحت نفس الوصف ().
هل يمكن أن تخبرني إذا كان يعمل؟ كما كنت أستخدمه لفترة من الوقت الآن.

هذه لقطة شاشة مع مثال على الكود والإخراج.
لاحظ أنه: في حالة عدم معرفتك ، تتم طباعة console.lg فوق جميع التقارير الأخرى ، وليس في النهاية حيث ترى تقرير تغطية الكود أو استئناف الخطأ.
Jest test console log

إصدارات My Node و NPM:

node v8.16.0
npm 6.4.1

لقد كنت متحمسًا للبدء أخيرًا في استخدام المزاح على الواجهة الخلفية للتوحيد. بدلاً من ذلك ، أواجه هذه المشكلة واعتبارًا من الآن أعود إلى mocha / proxyquire. لا يوجد مخرجات console.log مرئية (في الوحدات النمطية أو حالات الاختبار) وبعد قضاء عدة ساعات عليه ، لا يبدو أن أيًا من الحلول قد يساعد. لست مهتمًا بأي حلول بديلة تتضمن تسجيل الدخول إلى الملفات ...

تم اختباره مقابل العقدة 8/10 LTS "jest": "^24.9.0",

لقد اختبرت كل حل واحد في هذا الموضوع.

فقط للتحقق مما إذا لم يتغير شيء في هذا الصدد:
image

bash-5.0$ npm -v ; node -v; cat node_modules/jest/package.json |grep version
6.12.0
v12.11.0
  "version": "24.9.0",

تعديل

لاحظ أنه: في حالة عدم معرفتك ، تتم طباعة console.lg فوق جميع التقارير الأخرى ، وليس في النهاية حيث ترى تقرير تغطية الكود أو استئناف الخطأ.

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

image

شكرا لك على مساعدتك.

السؤال هو ما مدى الضرر الذي يلحق بالأداء ، ولكن هذا بالنسبة ليوم آخر ، يكون التسجيل أكثر أهمية.

أنت محق في pavelloz ، عندما تجري الاختبارات باستخدام الخيار --runInBand ، فسوف يستغرق الأمر وقتًا أطول لإنهاء الاختبارات لأنه يقوم بذلك:

--runInBand, -i                 Run all tests serially in the current process
                                  (rather than creating a worker pool of child
                                  processes that run tests). This is sometimes
                                  useful for debugging, but such use cases are
                                  pretty rare.

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

هتافات

مكون ثابت = ضحل (...)
console.log (component.debug ())

إنه لأمر لا يصدق أن هذا لم يتم إصلاحه بعد.

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

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

@ u84six هل جربت الحل الخاص بي؟
هذا هو الرابط لإجابتي على المنشور.
https://github.com/facebook/jest/issues/2441#issuecomment -552368939

هتافات

ivandosreisandrade ما يحدث هو أنه إذا كان هناك خطأ في الكود (مثل الإشارة إلى قيمة غير محددة) ، فلن تتم طباعته ، حتى لو كانت استدعاء console.log قبل الخطأ. إذا نجح كل شيء في الاختبار ، فسأرى السجل. هذا النوع من السلوك يجعله عديم الفائدة تمامًا في التصحيح.

ivandosreisandrade كيف تبدو package.json الخاصة بك؟ أحاول اتباع هذا:

اختبار npm - --runInBand -t "اسم الاختبار الخاص بي"

لكن لدي إعداد مثل هذا في package.json الخاص بي

" test: unit ": "jest - verbose"

كنت تعتقد أنه باستخدام علامة --verbose ، سيسمح لـ console.log بالمرور ، لكن ما زلت لا أستطيع الحصول على console.log للعمل. محبط للغاية!

ivandosreisandrade كيف تبدو package.json الخاصة بك؟ أحاول اتباع هذا:

اختبار npm - --runInBand -t "اسم الاختبار الخاص بي"

لكن لدي إعداد مثل هذا في package.json الخاص بي

" test: unit ": "jest - verbose"

كنت تعتقد أنه باستخدام علامة --verbose ، سيسمح لـ console.log بالمرور ، لكن ما زلت لا أستطيع الحصول على console.log للعمل. محبط للغاية!

@ u84six هذا هو packadge.json الخاص بي

"scripts": {
    "test": "jest test --coverage",
    ... 
},
...
"jest": {
    "verbose": true,
    "testMatch": [
      "**/tests/**/*.js?(x)"
    ],
    "moduleFileExtensions": [
      "js"
    ],
    "moduleDirectories": [
      "node_modules"
    ]
  }

يسمح testMatch إما بملفات .js أو .jx أو .jsx ، ولا تسمح moduleFileExtensions إلا بـ .js . هناك شيء يبدو خطأ.

ليست ذات صلة بالسبب: استهزاء الرجل:
هذا هو الملف الذي يجب تحديد موقعه وتشغيل الاختبارات عليه.

أنا غير متأكد من سبب إغلاق المشكلة. إذن ها هو إصدار العقدة الخاصة بي - 13.12.10 ، npm -6.14.4
jest -24.9.0

هنا اختبار أساسي مع نماذج وهمية
استيراد صور من "صور وهمية" ؛
استيراد * كـ fs من "fs" ؛
مضخة استيراد من "مضخة" ؛
استيراد * كمستفيد من "الاستفادة" ؛

describe('Test suite for bucket functionality', () => {
    beforeEach(() => {
        mock({
            'sample-file.txt': 'Content of the sample file',
            'sample-upload.txt': ''
        });
    });
    test('test upload', async () => {
        const filePromisy = util.promisify(fs.readFile);
        pump(fs.createReadStream('sample-file.txt'), fs.createWriteStream('sample-upload.txt'));
        filePromisy('sample-upload.txt').then(data => {
                       // when I do a console.log() here I get a warning stating that before I do an expect of data , I get a warning (no longer an error) stating that -_Cannot log after tests are done._

        }).catch(err => {

        });



    });
    test('test download', () => {

    });
});

أنا غير متأكد من سبب حدوث ذلك. هل هذا بسبب حلقة الحدث حيث يتم اعتبار console.log أنه مُعالج في علامة nextTick () فقط بعد تنفيذ مواصفات الاختبار. نعتذر عن طرح هذا الأمر ، ولكن يبدو أنه من الممل تصحيح أخطاء كل حالة اختبار واحدة ، بدلاً من مجرد إجراء وحدة التحكم o / p والتحقق من بيانات req.

نظرًا لأنه يتعين عليك إعادة ملفك وعد بروميسي بالمزح حتى يعرف متى يتم الاختبار - لا علاقة لمشكلتك بهذا الاختبار.

لقد تمكنت من التغلب على هذه المشكلة لأغراض تصحيح الأخطاء ببساطة عن طريق وضع كل ما أريد تسجيل الدخول إلى بيان مؤقت expect . لذلك ، بدلاً من console.log(sketchyVariable) ، استخدم expect(sketchyVariable).toEqual(42) .

ما الذي نجح معي في Node 8:
بدلاً من استخدام console.log ، استخدم سجل تصحيح الأخطاء المضمن:

const util = require('util')
const myLogger = util.debuglog('myloggername')
myLogger('foobar')

وابدأ الدعابة بعلامة مصحح الأخطاء:

NODE_DEBUG=myloggername npm test -t "My Test Name"

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

--verbose=false أصلحه لي. لقد فوجئت بهذا ، لأنني لم أقوم بتعيين verbose إلى true أي مكان. اتضح أن Jest سيعينها على true تلقائيًا إذا كنت تجري اختبارًا واحدًا . 🙃

إذا كان هناك ملف اختبار واحد فقط قيد التشغيل ، فسيتم تعيينه افتراضيًا على true.

https://jestjs.io/docs/en/configuration#verbose -boolean

موضوع StackOverflow ذو الصلة: https://stackoverflow.com/questions/48695717/console-log-statements-output-nothing-at-all-in-jest

jest لا يتعامل مع التسجيل بشكل جيد على مستويات متعددة. يجب

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

هذا هو. ليس معقد حقا.

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

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

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

احصل على Outlook لنظام التشغيل iOS https://aka.ms/o0ukef


من: earonesty [email protected]
تاريخ الإرسال: الأربعاء 12 أغسطس 2020 الساعة 12:33:23 مساءً
إلى: facebook / jest [email protected]
نسخة إلى: Chris Grimes [email protected] ؛ أذكر [email protected]
الموضوع: Re: لا يتم إخراج [facebook / jest] console.log عند تشغيل الاختبارات (# 2441)

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

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم بعرضها على GitHub https://github.com/facebook/jest/issues/2441#issuecomment-673011577 ، أو إلغاء الاشتراك https://github.com/notifications/unsubscribe-auth/AAFCNBK5MQEA6AJHEC52ZWDSALG6HANCNUXFSQ4C2VWDSALG6HANCNUXFSQ4C2VW

halis لقد استخدمت

إحساسي هو أن مسرحية Jest الرئيسية هي أن تكون سعيدًا لكسر السلوك المتوقع والدلالات بين الحين والآخر إذا أدت إلى تحسين تجربة الاختبار بشكل كبير. أشياء مثل الصياغة التلقائية لـ jest.mock(...) تعني أن اختبارات Jest ليست بدقة JavaScript (أو حتى ECMAScript) في دلالاتها ؛ وبالمثل ، فإن التوازي يعني أن أي طرق مضمنة عائدة باطلة مثل console.log يمكن ويجب معاملتها على أنها غير متزامنة ، إذا كان بإمكانها تحسين الأداء.

هل هذا شيء سيء؟ من الواضح أنه ليس بالضرورة ، لأن Jest ناجح بشكل كبير. لكنني أعتقد أن Jest لديها القدرة على مفاجأتك من حين لآخر. أنا متأكد تمامًا من أن 90٪ من مستخدمي Jest ليس لديهم أي فكرة أن شفرتهم تتحول إلى AST إلى مكالمات وهمية للرفع ، على سبيل المثال.

أنا متأكد تمامًا من أن 90٪ من مستخدمي Jest ليس لديهم أي فكرة أن شفرتهم تتحول إلى AST إلى مكالمات وهمية للرفع ، على سبيل المثال.

ماذا او ما

جرب استخدام console.debug أو console.error

يمكنك استخدام --useStderr في حالتي حل المشكلة لأنه يمرر الرسائل مباشرة

https://nodejs.org/api/process.html#process_a_note_on_process_i_o

لقد كنت أعاني من هذا مرة أخرى اليوم وقد أصلحت العلامة --useStderr بالنسبة لي. شكراdiomalta!

كنت أعاني من نفس المشكلة ، لم تكن السجلات تظهر عندما فشل الاختبار.

تمكنت من إظهار console.log خلال تعيين verbose: true في jest.config

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