Jest: السماح للكتابة فوق console.error / warn / log في الاختبارات

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


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

ما هو السلوك الحالي؟
بسبب BufferedConsole ، من المستحيل الكتابة فوق console.error ، console.log ، console.warn و console.info .

حالة الاستخدام: نود أن نكون قادرين على الحصول على أخطاء رمزية واختبارات فاشلة console.error و console.warn .

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

ما هو السلوك المتوقع؟
أتوقع أنه إذا أضفت console.error = (message) => { throw new Error(message); }; (عالميًا ، في اختبار ، أو في setupFiles / setupFramework) ، فإنه في أي وقت يتم استدعاء console.error في الاختبار ، فإنه سيؤدي إلى خطأ ويفشل في الاختبار.

في الواقع ، لا شيء يحدث.

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

غير متاح

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

استخدم وظيفة المحاكاة jest.fn() :

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

ال 3 كومينتر

استخدم وظيفة المحاكاة jest.fn() :

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

thymikee هذا لا يعمل كما هو متوقع أيضًا ، باستخدام ملف إعداد عام:

في "setupTestFrameworkScriptFile": "<rootDir>/tools/jest/setup-framework.js"

beforeEach(() => {
  console.error = jest.fn((error) => {
    throw new Error(error);
  });
});

في الاختبار:

const somePromiseThatLogsConsoleError = () => {
  return new Promise((resolve, reject) => {
    console.error('foobar');
    resolve();
  });
});

it('test that has console.error', () => {
  return somePromiseThatLogsConsoleError().then(() => {
    expect(false).toBeTrue();
  });
});

أنا فقط حاولت ذلك وأنه يعمل:

// test file
test('lol', () => {
  return new Promise((resolve) => {
    console.log('lol');
    resolve();
  });
});
// setup file
global.console.log = () => {
  throw new Error('hey!');
};

نتيجة:

 __tests__/test-test.js
  ✕ lol (3ms)

  ● lol

    hey!

      at CustomConsole.Object.<anonymous>.global.console.log (setup.js:2:9)
      at resolve (__tests__/test-test.js:3:13)
      at Object.<anonymous>.test (__tests__/test-test.js:2:10)
      at process._tickCallback (internal/process/next_tick.js:109:7)

Test Summary
 › Ran all tests.
 › 1 test failed, 0 tests passed (1 total in 1 test suite, run time 0.661s)
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات