Jest: console.log tidak keluar saat menjalankan tes

Dibuat pada 25 Des 2016  ·  236Komentar  ·  Sumber: facebook/jest

Apakah Anda ingin meminta fitur atau melaporkan bug ?

Laporkan bug .

Apa perilaku saat ini?

Memanggil console.log menggunakan testEnvironment default dari jsdom tidak mencetak ke stdout.

Jika perilaku saat ini adalah bug, berikan langkah-langkah untuk mereproduksi dan demo repl.it melalui https://repl.it/languages/jest atau repositori minimal di GitHub yang kami dapat yarn install dan yarn test .

  1. Klon https://github.com/udbhav/jest-test
  2. Jalankan yarn test
  3. Konfirmasikan bahwa Anda tidak melihat apa pun dari console.log
  4. Ubah pengaturan konfigurasi testEnvironment Jest menjadi node
  5. Jalankan kembali yarn test
  6. Konfirmasikan bahwa Anda melihat keluaran dari console.log

Apa perilaku yang diharapkan?

Saya berharap console.log selalu menampilkan saat pengujian saya berjalan.

Harap berikan konfigurasi Jest Anda yang tepat dan sebutkan Jest, node, versi yarn/npm dan sistem operasi Anda.

Lihat package.json dan yarn.lock di repo untuk versi paket. Saya menjalankan node 7.3.0 dan yarn 0.18.1

Komentar yang paling membantu

Saya menggunakan node v4.4.7, dan sejauh yang saya ketahui - tidak ada yang muncul ke stdout saat menggunakan console.log adalah masalah. Saya tidak mencoba untuk mendapatkan bantuan dengan pengkodean, saya melaporkan apa yang tampaknya menjadi bug kepada saya. Satu-satunya hal lain yang berubah adalah saya menjalankan beberapa file pengujian sebelumnya, dan sekarang hanya satu. biarkan saya melihat apakah mengaktifkan kembali tes lain membuat output console.log muncul lagi.

Semua 236 komentar

Baru saja menguji ini menggunakan repl.it: https://repl.it/EwfT/0

Kabar baiknya adalah ini berfungsi seperti yang diharapkan dan keluaran console.log. Saya mencoba menurunkan versi lelucon saya ke 17.0.3, masih melihat masalah yang sama. Menginstal nvm untuk menguji dengan node v6.9.2, dan hore console.log bekerja dengan jsdom, jadi saya berasumsi masalah terkait dengan node v7.

Terima kasih telah melaporkan ini, tapi itu duplikat dari #2166 dan juga terjadi di Node 6.

@thymikee Bagaimana ini duplikat #2166? Dalam skenario ini, console.log tidak menghasilkan apa-apa. Saya mengalami masalah ini dengan Node v4. Hal yang membuat frustrasi adalah bahwa itu berfungsi dengan baik sebelumnya hari ini, dan dengan 0 perubahan pada lingkungan saya, saya tidak mendapatkan lagi console.log keluaran ke terminal saya.

@thisissami sepertinya tes atau kode Anda tidak berjalan. Rangkaian pengujian Jest melewati node 4 dan node 6 yang memastikan pencetakan konsol berfungsi dengan baik dan kami sedang mengerjakan perbaikan untuk 7.3.

@cpojer - Tes saya lulus/gagal dengan benar - hanya pesan console.log yang tidak muncul. Saya menemukan ini ketika mencoba mencari tahu apa properti dari objek tertentu dengan console.log ing itu, dan tidak melihat output. Saya telah menambahkan banyak pernyataan console.log dan tidak ada yang muncul di terminal saya sekarang. =/ Saat ini saya kembali ke Jest v17 untuk melihat apakah itu mengubah sesuatu.

Jika itu berfungsi lebih awal hari ini untuk Anda dan tidak lagi, Anda pasti telah membuat pembaruan atau merusak sesuatu sendiri. Kami tidak menerbitkan rilis Jest dalam dua minggu.

ok jadi satu-satunya hal yang berubah dalam kode pengujian saya adalah saya telah menambahkan komentar multiline setelah kode yang seharusnya dijalankan (sebagai referensi untuk saya sendiri). Saya akan melihat apakah menghapus itu membuat perbedaan.

@cpojer Saya tidak tahu harus berkata apa, saya tidak melihat ada yang salah dalam kode pengujian saya tetapi tidak ada yang dikeluarkan ke 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);
  });
});

Tes gagal, seperti yang diharapkan, jadi saya tahu itu berhasil. Konfigurasi saya di package.json sangat sederhana, hanya:

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

Jest berjalan sangat normal, tidak ada tanda tambahan yang terpasang. Masalah yang sama dengan Jest v17 & 18.

Saya belum mengubah file apa pun selain yang ini sepanjang sore. Saya baru saja mulai memahami bagaimana enzyme bekerja dengan mengeluarkan berbagai hal ke stdout , dan setelah mulai menambahkan beberapa expects , console.logs berhenti bekerja ketika saya membutuhkannya lagi, dan sekarang mereka tidak berfungsi sama sekali - tidak peduli apa yang saya miliki dalam pengujian. Saya juga tidak mengubah apa pun di lingkungan saya (selain menurunkan versi sekarang ke v17), yang tentu saja membingungkan.

Sepertinya Anda memperbarui ke simpul 7.3. Kami memiliki beberapa perbaikan untuk itu. Harap perhatikan pelacak masalah ini bukan forum bantuan; gunakan stackoverflow untuk pertanyaan :)

Saya menggunakan node v4.4.7, dan sejauh yang saya ketahui - tidak ada yang muncul ke stdout saat menggunakan console.log adalah masalah. Saya tidak mencoba untuk mendapatkan bantuan dengan pengkodean, saya melaporkan apa yang tampaknya menjadi bug kepada saya. Satu-satunya hal lain yang berubah adalah saya menjalankan beberapa file pengujian sebelumnya, dan sekarang hanya satu. biarkan saya melihat apakah mengaktifkan kembali tes lain membuat output console.log muncul lagi.

@cpojer Cukup yakin kalian memiliki bug di sini.

Menjalankan 3 tes (seperti dalam 3 file berbeda dengan .test.js , dengan 2 file tersebut sebagai contoh dari tutorial Anda) berfungsi tanpa masalah. Pengujian saya (disalin di atas) membuat semua console.logs.

Hanya dengan 1 kali uji coba (alias saya mengganti nama .test.js menjadi .teast.js pada 2 file) tidak menghasilkan output console.log yang dirender.

Saya akan terus menjalankan tes arbitrer kedua sehingga saya melihat output yang saya butuhkan, jadi saya baik untuk kebutuhan pribadi saya - tetapi ini harus ditangani imo, dengan asumsi itu dapat direproduksi di tempat lain.

Paket pengujian Jest menguji perilaku ini pada node 4, node 6 dan node 7.3. Ini berfungsi untuk 4 dan 6 tetapi rusak di 7.3. Saya memperbaiki ini untuk node 7.3 dan akan segera menerbitkan rilis baru Jest: https://github.com/facebook/jest/pull/2464

Jika rangkaian pengujian Jest sendiri menggunakan node 4 gagal untuk Anda, kemungkinan ada yang salah dengan pengaturan Anda.

Mengkloning repositori dan mencobanya sekarang.

Semuanya lulus kecuali untuk 3 tes ini. Tidak yakin implikasi apa yang mungkin terjadi. Anda memiliki semua info tentang kesalahan apa yang terkait dengan console.log yang saya alami, serta gambar di bawah ini. Jika itu bukan bug dalam lelucon, maka biarlah. Tampaknya aneh bagi saya bahwa tidak melakukan apa pun selain mengikuti panduan akan menghasilkan skenario di mana saya tidak dapat melihat log saya ketika hanya menjalankan satu file pengujian.

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

Ini hanya menunjukkan Anda tidak menginstal mercurial (hg), tidak terkait dengan masalah Anda. Sepertinya test suite lolos untuk Anda dan seperti yang dikatakan; kami secara eksplisit menguji perilaku logging di test suite sehingga pasti ada yang salah dengan kode atau pengaturan Anda.

Oke keren - terima kasih atas tanggapan Anda. Apakah Anda memiliki firasat tentang apa yang menyebabkannya berfungsi ketika ada banyak file tetapi tidak ketika hanya ada 1? Jika tidak ada "oh ini terkadang menyebabkan masalah seperti itu" yang muncul di pikiran Anda - jangan khawatir, saya hanya akan memastikan bahwa selalu ada setidaknya 2 file yang berjalan. :)

Saya mengalami masalah yang sama, console.log tidak menghasilkan untuk saya sekarang (dan sebelumnya sekitar satu jam yang lalu). Saya menggunakan node 6.9.1 dan juga mengaktifkan flag --forceExit. Ketika saya tidak mengaktifkan flag ini, output console.log muncul.

Namun, saya memiliki skrip pengujian lain yang menggunakan flag --forceExit dan console.log muncul, jadi saya tidak dapat mengatakan bahwa flag --forceExit menyebabkan perilaku ini.

Seperti yang dilakukan @thisissami , saya mengalami masalah pencatatan hanya ketika saya mencoba menguji satu file.

Saya mengalami masalah yang sama, tetapi ternyata itu karena menjalankan lelucon melalui jest-cli (jest.runCLI) di dalam gulpfile.js dan itu menelan output dari console.log. Jika saya menjalankan lelucon secara langsung, saya melihat output konsol.

Saya sekarang melihat beberapa perilaku funky, yang belum dapat saya isolasi ke kasus uji sederhana, jika tidak saya akan mengajukan masalah baru.

1) Jest menjalankan tes
2) Jest menampilkan pernyataan console.log (jangan berkedip di sini)
3) Jest menggulir kembali sejumlah baris yang berubah-ubah, yang terkadang mencakup semua baris console.log, terkadang beberapa dan terkadang semua.
4) Jest menjalankan tes berikutnya (baris console.log dari tes sebelumnya menghilang).

lelucon v18.1.0

Karena saya tidak dapat mengisolasi ini dalam tes sederhana, saya kira ini ada hubungannya dengan menjalankan tes asinkron yang lebih kompleks.

Saya mendapatkan masalah yang sama, saya ingin tahu apakah outputnya menimpa output lainnya. Kadang-kadang saya akan melihat sesuatu seperti ini:

image

Ini seperti satu proses yang menghasilkan kesalahan (tipe prop yang gagal) tetapi itu baru saja ditulis oleh log keluaran pengujian.

Lagi:

image

Dan terkadang jika saya Ctrl + c saat pengujian berjalan, saya akan melihat log konsol yang tidak akan saya lihat jika pengujian selesai.

Versi
Lelucon: 17.0.1
Simpul: 6.6.0
NPM: 3.10.3
macOS: 10.12.2
Terminal: 2.7.1 (dan juga di iTerm2 3.0.13)
Skrip (dalam package.json ): jest /src/main/js --watch atau jest /src/main/js --coverage atau jest --watch --onlyChanged semuanya memiliki perilaku yang sama.

@davidgilbertson apakah itu terjadi di v18.1?

Saya sudah mencoba 18.1.0 dan tampaknya lebih buggier. Dan saya masih melihat hal-hal seperti ini:

image

Saya tidak dapat memilih pola tertentu, tetapi beberapa hal yang telah terjadi (saya memiliki console.warn('----------------') di salah satu komponen saya.)

  • Jika saya menggulir sedikit ke atas dari bawah ketika saya menjalankan tes, saya melihat log. Jika saya menggulir ke bawah jendela terminal saat tes sedang berjalan (sehingga mulai menggulir otomatis) maka ketika tes selesai, saya menggulir kembali dan baris console.warn hilang (mungkin ditimpa).
  • Jika saya menjalankan tes dan langsung menekan ctrl + c , saya melihat beberapa log konsol. Tetapi jika saya melakukan hal yang sama dan tidak menginterupsi, log konsol tersebut tidak akan terlihat.
  • Ketika saya menjalankan jest /src/main/js --watch sekali, lalu tekan a untuk menjalankan lagi, ia mengambil banyak tes warisan di direktori src/main/assets/legacy - tidak cocok dengan glob.
  • Sama seperti di atas jika saya hanya menjalankan jest --watch (semua tes saya berakhir dengan .test.js atau .test.jsx ). Jadi, menekan 'a' dalam mode arloji tampaknya mencari di mana-mana, termasuk tes melati lama yang disebut src/test/js/spec/categoryselector/spec.js . Menekan Enter tampaknya melakukan apa yang saya harapkan.

Mungkinkah semua kesalahan yang disebabkan oleh alat peraga yang hilang menyebabkan masalah ini? Saya harus menyimpan ctrl+c pada output untuk mencoba dan menangkap kesalahan ini sebelum ditimpa.

Tidak bekerja untuk saya juga (bercanda 19.0.1, node 5.12). Menariknya itu berfungsi pada proyek lain dengan pengaturan yang sama. Tidak yakin bagaimana men-debug tes Jest sehingga saya pikir bisa melihat beberapa pesan konsol akan sangat penting.

Sudahkah Anda mencoba menggunakan flag lelucon --runInBand untuk melihat apakah itu menyelesaikannya dengan menjalankan tes secara serial? Seseorang menyebutkan ini kepada saya, tetapi belum memiliki kesempatan untuk mengujinya.

Bendera bail mencegah log konsol dari pencetakan.

Saya akan mencoba. Hal yang sedikit menakutkan adalah bahwa dalam proyek yang sama beberapa pernyataan log konsol dikeluarkan di konsol, beberapa tidak. Sayangnya yang saya coba tambahkan di mana test case gagal tidak mendapatkan output (saya mencoba menambahkan di mana-mana di test case, di unit yang diuji, dll tetapi tidak berhasil). Jadi saya sebenarnya tidak berpikir ini bisa menjadi tanda, karena perilakunya tidak ringkas. Ini adalah proyek asli reaksi, mengikuti tata letak standar btw.

Tak satu pun dari ini tampaknya membantu. Bendera --bail hanya menghentikan tes lain agar tidak dijalankan (yang menyinggung adalah yang terakhir dalam kasus saya), dan --runInBands tampaknya tidak memiliki perbedaan yang dapat diamati. Jest menjalankan file yang diperbarui btw, jadi jika saya memasukkan pernyataan console.log, jejak tumpukan kesalahan menunjukkan kesalahan yang berasal dari nomor baris yang diperbarui. Hanya saja log konsol tidak terjadi. Karena sulit/tidak mungkin untuk men-debug tes ini di browser (tolong perbaiki saya jika ini tidak terjadi) console.log sangat penting untuk memperbaiki beberapa masalah dalam tes.

Tampaknya test case ini sebenarnya tidak dijalankan. Ada TypeError (mengakses properti di undefined). Apa yang menyesatkan saya adalah bahwa saya benar-benar melihat jejak tumpukan di konsol, yang menunjukkan bahwa itu sedang dieksekusi. Jadi melihat jejak tetapi tidak melihat pesan log tidak cukup :) Adakah yang tahu mengapa itu dilakukan dengan cara ini, jadi jika tes gagal dengan kesalahan runtime, log tidak ditampilkan seperti yang terlihat? (Untuk memperjelas maksud saya log yang telah terjadi hingga titik kesalahan, saya jelas tidak bermaksud log setelah kesalahan :))

Di lingkungan saya, saya telah mengatur verbose: true dalam opsi lelucon di package.json . Mengubah ini menjadi false (atau menghapusnya) memperbaiki masalah bagi saya. Semua log konsol saya ditampilkan sekarang.

Ini di 18.1.

Untuk siapa pun yang mengalami masalah ini, periksa dependensi yang baru saja ditambahkan. Saya mulai mengalami masalah setelah menambahkan mock-browser dalam upaya untuk mengejek objek browser. Rupanya itu menggantikan global dengan objeknya sendiri.

package.json (konfigurasi lelucon)

"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
Mengomentari bit 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 berfungsi dengan baik.

Mengapa masalah ini ditutup? Jelas bukan duplikat #2166

Saya akan menambahkan $0,02 saya karena saya baru saja mengalami ini.

Masalah:

  • Saya menjalankan jest --watch --verbose (v19.0.2)
  • Beberapa (tetapi tidak semua!) console.log pernyataan tidak muncul, baik selama uji coba, atau dalam ringkasan
  • Dalam kasus saya, saya dapat mengisolasinya ke panggilan _.reduce : semua console.log pernyataan di dalam blok ini tidak ditampilkan , console.log pernyataan di luar blok pengurangan ditampilkan . Saya telah memverifikasi dengan cara lain (cakupan, hasil tes) bahwa badan peredam sebenarnya dipanggil. Ini aneh karena saya tidak melakukan apa pun berdasarkan async/janji di bagian kode ini, saya tidak dapat memahami mengapa pengurangan panggilan akan memengaruhi apa pun.
  • Jika saya memanggil lelucon dengan --runInBand , saya melihat semua pernyataan console.log .
  • Tidak seperti kebanyakan laporan sebelumnya, saya menjalankan "testEnvironment": "node" , bukan jsdom

Komentar berikut tampaknya terkait dengan masalah saya:

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

Ini cukup cepat, tapi tampaknya seperti console.logs sebenarnya ditarik ke layar dan kemudian ditimpa.

Baru saja dikonfirmasi dengan video bahwa console.log sebenarnya ditarik ke layar selama ~0.2 detik sebelum ditarik.

Menjalankan --watch tanpa --verbose tampaknya memperbaiki ini.

Saya menghabiskan 10 menit mencoba mendapatkan kasus repro yang terisolasi, tetapi sepertinya saya tidak bisa melakukannya. Ini mungkin hanya bermanifestasi dengan suite pengujian besar (well, >1).

Anda dapat melihat perilakunya di sini:

  • Sebelum console.log
    screen shot 2017-03-29 at 3 38 51 pm

  • console.log - ditampilkan untuk sepersekian detik (<0.2s)
    screen shot 2017-03-29 at 3 39 34 pm

  • Setelah console.log selesai dicat
    screen shot 2017-03-29 at 3 39 47 pm

Masalah ini benar-benar menyebalkan, membuang banyak waktu untuk masalah ini dan sepertinya tidak ada yang berhasil. Saya memilih lelucon karena saya pikir para insinyur Facebook memiliki rangkaian pengujian yang layak dan sekarang ini ...

Inilah mengapa saya tidak suka Jest. Tidak peduli apa yang Anda lakukan, mereka akan menghapus konsol Anda dan menolak untuk menampilkan pernyataan konsol apa pun, dan kemudian entah bagaimana secara acak mereka akan muncul, sampai Anda memiliki kesalahan yang perlu Anda perbaiki, dalam hal ini mereka akan melakukan yang terbaik untuk menyembunyikan setiap pernyataan log sehingga Anda tidak dapat memperbaikinya.

Mengapa Anda tidak BERHENTI saja mencoba menyembunyikan keluaran konsol dari pengembang? Jika saya ingin melatih roda saya akan menggunakan Angular 1!

Itu cukup agresif @halis. Kami melakukan ini karena Jest memparalelkan pengujian dan banyak pengujian dapat masuk ke terminal secara bersamaan, yang berarti bahwa keluaran Jest menjadi tidak berguna. Kami sebenarnya pernah melakukan itu. Jika Anda menggunakan --verbose , kami sebenarnya tidak menyangga apa pun dan menulis langsung ke konsol.

Jika itu tidak berhasil untuk Anda, mungkin Anda dapat membantu kami dengan mengirimkan PR ke Jest dan memperbaiki perilaku ini.

Maaf, saya mengalami hari yang sangat buruk pada hari Jumat dan merasa frustrasi. Tidak ada alasan untuk melampiaskannya pada Anda, Anda hanya mencoba membantu.

Saya memang menemukan flag --verbose pada hari Jumat, yang memberi saya hasil yang cukup untuk memperbaiki masalah saya.

Sekali lagi, maaf untuk menjadi seperti kontol tentang hal itu.

Itu keren. Jangan biarkan alat JavaScript merusak hari Jumat Anda

ada berita tentang ini? bagaimana cara menampilkan console.log?

perilaku yang sangat menarik, setelah membenturkan kepala saya beberapa kali (lebih seperti beberapa kali) mengetahui bahwa --verbose memang pelakunya untuk tidak memiliki console.log yang dicetak.
Solusi terbaik saya adalah membuat skrip lain di package.json yang tidak melibatkan flag verbose ketika saya ingin beberapa pesan dicetak di konsol saya. Akan sangat menghargai jika kalian segera memperbaikinya

Masalah ini memang cukup mengganggu karena menyulitkan/mustahil untuk men-debug tes menggunakan console.log (saya tahu.. jadul tapi masih nyaman).
Bagi saya untuk menggunakan opsi --runInBand membuat pernyataan log saya muncul.

EDIT: Saya cukup yakin ini terkait dengan cara hasilnya ditampilkan di layar ... salah satu opsi adalah memiliki reporter 'dummy' yang tidak mencoba rendering mewah. Pilihan lain adalah membiarkan pengembang memilih reporter seperti yang dilakukan mocha.

Ini lebih buruk daripada tidak menampilkan log:

Jika saya memiliki bentuk kesalahan apa pun dalam pengujian asinkron, maka saya tidak hanya tidak melihat pesan log, tetapi kesalahan expect juga disembunyikan, dan pengecualian tertelan.

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

Tidak ada tes expect ditampilkan.

````
Batas waktu - Panggilan balik asinkron tidak dipanggil dalam batas waktu yang ditentukan oleh 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)

````

Baik runInBand maupun verbose:false membantu.

Saya memiliki konfigurasi sederhana ( babel-jest ).

@richburdon untuk tes async menggunakan done Anda perlu menutupi kasus gagal dengan done.fail()

@thymikee terima kasih atas respon cepatnya. meskipun saya tidak tahu apa yang Anda maksud. dapatkah Anda mengubah pengujian saya dan/atau mengarahkan saya ke dokumen. Terima kasih banyak.

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);
});

Saya mengerti bahwa ini tidak ideal, tetapi beginilah cara kerjanya saat ini. Perlu dicatat, bahwa itu bukan masalah, ketika fungsi yang diuji mengembalikan Promise . Ada beberapa masalah yang terpengaruh oleh perilaku ini, seperti https://github.com/facebook/jest/issues/2136 atau https://github.com/facebook/jest/issues/2059. Jika Anda memiliki ide untuk meningkatkannya, kami ingin meninjau PR dan mewujudkannya.

Tapi ini bukan masalah yang relevan untuk dibahas, Anda dapat memposting ide Anda di tempat lain.

@thymikee , contoh saya tidak bagus karena setTimeout memiliki masalah yang berkaitan dengan janji yang tidak ada hubungannya dengan lelucon...

Perlu dicatat, bahwa itu bukan masalah, ketika fungsi yang diuji mengembalikan Janji.

Saya tidak melihat itu:

````
test('async', (selesai) => {
fungsi fo() {
kembalikan Janji.resolve(1);
}

foo().then(nilai => {
harapkan(nilai).toEqual(2); // Tidak pernah melaporkan; hanya waktu habis.
selesai();
});
});
````

Tidak jelas bahwa kode pengujian harus menangkap pengecualian untuk panggilan expect (yaitu, bagian dari kerangka pengujian itu sendiri). Ini tampaknya cukup berbelit-belit?

Jadi, untuk memperjelas, saya harus membungkus SEMUA tes yang melibatkan fungsi yang diuji yang mengembalikan janji dengan blok catch -- untuk menangkap panggilan expect , yang sebaliknya akan: a) timeout; b) tidak melaporkan kesalahan.

Kecuali saya membuat kesalahan yang berbeda:

sebuah). Mungkin mendokumentasikan ini (https://facebook.github.io/jest/docs/asynchronous.html#content)?

B). Mengapa tidak mencatat kesalahan? dan/atau memiliki opsi untuk keluar?

Saya memiliki masalah yang sama dengan console.log.
Itu berfungsi dengan baik di v19, dan saya dapat melihat output di konsol.
Setelah memutakhirkan ke v20.0.3, outputnya hilang.
Saya mencoba menambahkan --runInBand atau --verbose , tetapi tidak membantu.

Tingkatkan ke versi nodejs terbaru. Ini adalah masalah yang diketahui di node ~7.3.

@thymikee Jadi apakah mereka akan memperbaiki masalah ini? Saya telah mencoba segalanya di bawah matahari. Masih tidak ada log konsol. Saya menggunakan praprosesor TypeScript dan lelucon yang disediakan. Saya menggunakan ts-jest dan praprosesornya berfungsi. Apakah mungkin ada hubungannya dengan preprocessor?

@cpojer @lsentkiewicz Haruskah kita membuka masalah baru karena ini adalah masalah baru pada versi baru?

Seperti yang disebutkan @cpojer , menggunakan versi terbaru dari node memperbaiki masalah.

@marcusjwhelan
Bekerja untuk saya di v7.10.0

Saya masih melihat keluaran konsol tertelan saat menggunakan jest --bail .

@cpojer Tidak bekerja pada v8.0.0

Tidak bekerja pada simpul 8.0.0

Saya merasa ini adalah bug yang buruk Jika Anda harus menggunakan versi tertentu agar bisa berfungsi. Bagaimana jika sistem Anda berjalan pada 6.0 dan tidak berfungsi di 7.0 karena beberapa perubahan nodejs. Bukankah seharusnya bercanda bekerja pada setidaknya versi modern dari Node? dukungan minimal 5 tahun? @cpojer @taion

Ini adalah bug di node 7.3 saja. Mereka menggabungkan perubahan buruk dan mengembalikannya ke 7,4 atau 7,5.

Orang-orang mengatakan kepada saya itu tidak berfungsi pada simpul 8 tetapi kami memiliki tes untuk perilaku ini dan itu lewat. Jika orang ingin membuat repro yang tepat dengan Jest 20 dan node 8, silakan buat masalah untuk itu.

@cpojer Saya tidak melihat keluaran console.log dengan pengaturan ini (macOS):

$ node --version
v7.4.0

File

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');
})

Keluaran

$ 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.

Tes JS tunggal:

$ 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".

Tes TS tunggal:

$ 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".

Memiliki masalah yang sama dengan simpul v8.1.2. Saya juga telah mencoba node v7.10.0 dan itu juga tidak berhasil

Bekerja pada proyek React saya mencoba Jest karena dengan Jasmine adalah total pencarian untuk menguji panggilan HTTP dengan whatwg-fetch , eksekusi Node.js dan transpilasi Babel. Tetapi ketika saya melihat bahwa saat ini dengan Jest Anda tidak dapat mencetak ke konsol, itu tidak boleh menggunakan kerangka kerja ini. Memiliki masalah dengan Node.js 7.10 dan Jest 20.0.4.

Akhirnya saya dapat mengatur semua lingkungan pengujian dengan eksekusi Jasmine dan Node.js dengan mendeklarasikan xmlhttprequest pada lingkup global dan menggunakan nock sebagai server palsu.

Bug bisa sangat sulit untuk ditangkap dan diperbaiki. Tapi yang ini adalah P0 yang dilaporkan 6 bulan lalu yang akan mencegah siapa pun untuk menganggap Jest secara serius sebagai kerangka pengujian untuk proyek React apa pun.

Saya mengalami masalah yang sama seperti pada tangkapan layar @davidgilbertson (hasil pengujian menimpa console.log) pada Jest 19.0.2 dan Node 7.10.0 saat menjalankan jest --verbose . Apa yang membantu saya: saat menggunakan jest --verbose --runInBand itu berfungsi dengan benar (hasil tes pertama, lalu semua console.log).

@cpojer @thymikee maukah Anda membuka kembali masalah ini sehingga mendapat perhatian?

@iffy , bisakah Anda membuat masalah terpisah dengan repro Anda? Saya akan mencoba melakukan triase dan melihat apa yang salah.
BTW tidak ada yang gagal di bawah ekspektasi yang akan dipanggil, karena lemparan ekspektasi.

@thymikee selesai (walaupun saya sudah beralih ke moka -- jadi jangan khawatir tentang triase)

Saya juga mengalami masalah ini, dan bahkan setelah membaca semua utas ini dan mencoba semuanya, saya tidak dapat menyelesaikan masalah ini. Pengujian saya sangat sederhana, karena saya baru saja mengimplementasikan jest di aplikasi saya, dan meskipun demikian console.log tidak muncul.

Kemudian saya mencoba menggunakan winston untuk masuk ke file keluaran dan berhasil. Kemudian saya mencoba menggunakan winston untuk masuk ke konsol dan, coba tebak, berhasil!

Jadi saya menyarankan kalian untuk melakukan hal yang sama. Periksa file 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;

Dalam file tes cukup gunakan:

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

Winston berfungsi karena menggunakan process.stdout.write yang mengatasi bug ini di Jest. Saya akhirnya membuat console.log saya sendiri dengan menggunakan modul util node.

@eranimo @Daymannovaes lihat bug #3853

Komentar itu mengatakan itu berfungsi pada 8.1.2 tetapi saya mencobanya dan saya tidak berhasil. Saya sudah beralih ke moka karena ini adalah bug yang sangat buruk.

Apakah bug ini akan diperbaiki pada rilis berikutnya? Juga, di mana saya menemukan ketika itu?

Saya tidak dapat memutakhirkan ke versi simpul terbaru (bukan opsi) jadi itu bukan solusi. Saya bisa membuat util logger saya sendiri yang bisa saya mainkan. Saya sedang mempertimbangkan untuk mengonversi ke moka tetapi itu tergantung pada bagaimana eksperimen util logger saya berjalan.

Tolong perbaiki ASAP, log konsol sangat membantu untuk menulis tes saya.

Saya telah menurunkan versi sementara ke 19.0.2 dan itu berfungsi.

Saya memiliki masalah yang sama dan baru saja mengujinya dengan versi terbaru dari node.js. Ini bekerja sekarang. :100:

Ini juga berfungsi dari saya setelah pindah dari Node.js v7.10 ke v8.1.

diperbaiki untuk saya saat memperbarui simpul dari 7.4.0 -> 8.2.1

Mendapatkan ini di node v8.4.0 dan Jest 21.0.0-beta.1.

Saat menjalankan hanya satu kasus uji dengan test.only , keluaran console.log tidak muncul.

Tetapi jika saya menghapus --testPathPattern file dan menjalankan semua tes, output akan muncul.

Juga, jika saya menambahkan await Promise.delay(100) sebagai langkah terakhir dalam pengujian, output akan muncul.

maaf atas komentar ini tetapi ini adalah cara mereka untuk membuat Jest ke console.log secara real time alih-alih setelah tes lulus atau gagal. pengujian saya menggunakan loop sementara Saya mencoba untuk mendapatkan nilai yang dicatat saat loop sedang berjalan?

@nharrisanalyst menggunakan --verbose bendera

terima kasih atas tanggapannya tetapi saya menggunakan flag ini dan hanya console.log() setelah tes lulus atau gagal. jadi jika loop sementara saya macet, saya tidak dapat men-debugnya dengan console.log saat pengujian karena pengujian tidak lulus atau gagal, itu hanya macet dalam satu lingkaran.

Jest tampaknya memakan konsol apa pun yang saya lakukan dalam setupFiles , setupTestFrameworkScriptFile , atau beforeAll , sehingga tidak mungkin untuk menulis skrip pengaturan pengujian yang meminta input pengguna dan memvalidasi perintah bendera garis. Terjadi dengan atau tanpa "verbose": true

Berbagi pengamatan saya di console.log() tidak muncul saat menjalankan tes dengan Jest.

Prasyarat untuk ini adalah menjalankan Jest dengan flag --verbose .

Jika Anda menjalankan pengujian dengan beberapa file pengujian , keluaran dari console.log() tidak terlihat (sebagian besar waktu).
Jika Jest menjalankan pengujian hanya dari

Anda dapat mengatasi masalah ini dengan:

  • Jalankan tes Jest hanya dari 1 file. Yup...tidak realistis sama sekali, jadi lihat opsi selanjutnya.
  • Gunakan bendera --maxWorkers=1 . Entah bagaimana, ini bekerja dengan baik untuk saya. Dugaan saya(*) adalah...Jest berjalan dalam proses yang sama dan tidak perlu buffer stdout dari setiap proses untuk menyalurkannya kembali ke proses utama.

Jika tebakan saya (*) adalah perilaku yang diharapkan, saya sarankan memperbarui dokumen untuk menunjukkannya dengan jelas untuk menghindari pengembang membuang-buang waktu mencoba mencari tahu "mengapa console.log() saya tidak muncul...kadang-kadang".

OK Jadi ini masih menjadi masalah bagi sebagian orang termasuk saya hari ini. Saya membayangkan itu akan terus menjadi sesuatu.

Dari pengujian saya, Jest keluar dari proses sebelum mengeluarkan log yang berarti sepertinya log sedang ditelan.

Bagi saya, saya mengatur verbose: true dan bail: false di konfigurasi lelucon saya. Lelucon akan berlanjut hingga semua tes dijalankan dan akan menampilkan semua kesalahan dan log. Ini menguntungkan. Saya juga menjalankan --runInBand , yang melakukan hal yang sama seperti pengaturan --maxWorkers=1 .

Bantuan terbesar adalah bail: false karena itu memungkinkan semua tes berjalan hingga selesai. Itu masih keluar dengan kode 1 tapi saya bisa melihat semua log lagi.

Menjalankan Jest v19.0.2 dengan simpul v8.1.4.

Menjalankan --verbose --testPathPattern=<path/to/file> menyebabkan log sedang dicetak. Jika tidak, itu akan tertelan.

Adakah yang bisa memberikan reproduksi kecil yang gagal pada lelucon 21.2.0 dan node saat ini (jadi 4.8.4, 6.11.4 atau 8.7.0)?

Tidak perlu mengonfigurasi verbose atau konfigurasi lelucon tambahan dan masalahnya hilang begitu saja ketika saya memutakhirkan versi simpul saya dari 7.4.0 ke 8.0.0 . Itu pengamatan saya.

Menggunakan [email protected]

Ini sangat membuat frustrasi! Saya memiliki versi terbaru dari semuanya dan masih Jest memotong keluaran console.log di tempat-tempat yang tampaknya acak. Ini membuatnya sangat sulit untuk men-debug tes yang gagal.

Saya baru saja menemukan jawaban untuk ini! Jika Anda mematikan mode verbose, semua output console.log akan muncul! Saya pikir ketika keluaran Jest adalah hal-hal yang bertele-tele, ia menulisnya di atas keluaran Anda dari beberapa console.logs terakhir.

Apakah Anda memiliki beberapa bagian kode yang secara konsisten mereproduksi ini? Mungkin membantu kami menghilangkan inkonsistensi mendasar yang menyebabkan masalah.

Saya menggunakan expect(<value>).toEqual("someImpossibleValue") dengan bail: false untuk mengatasi ini ketika hanya mencoba untuk memperbaiki sesuatu yang rusak. Jelas tidak ideal, tapi cepat dan kotor...

Mungkin Anda bisa memperkenalkan fungsi asumsi() yang mirip dengan expect(), tetapi tidak menjamin.

menjalankan v 22.0.4 no console.log.... tambahkan ini ke salah satu dari banyak alasan lain saya tidak merekomendasikan lelucon

@mvolkmann terima kasih atas petunjuk tentang mode verbose. Jika mode non-verbose adalah default dalam lelucon, mungkin layak untuk mempertimbangkan perubahan. Tampaknya tidak intuitif bagi saya bahwa console.logs yang Anda tempatkan dalam kode Anda tidak muncul. Ini adalah hal pertama dan mendasar yang dicoba ketika sebuah tes gagal.

(simpul v9.3.0 dan lelucon v20.0.4 di sini)

jest ^21.2.1 dan node 8.9.4

Bercanda terkadang masih tidak membuang log konsol, opsi --verbose tidak menyelesaikan masalah bagi saya. Saya tidak mengerti mengapa masalah ini ditutup.

@fega karena tidak ada yang menyediakan

$ jest --verbose

perintah ini akan menampilkan semua log konsol

@odykyi tidak bekerja untuk saya. bercanda 22.1.0 dan v8.9.4

perilaku aneh. Jika saya menetapkan verbose ke false pernyataan console.log saya dicetak.

pada [email protected] , [email protected] , dan menggunakan --forceExit , saya tidak melihat output console.log dari kode yang saya uji kecuali saya secara eksplisit menetapkan verbose ke false atau hapus flag --forceExit (yang saya gunakan sementara).

pada [email protected] , [email protected] , dan menggunakan --forceExit, saya tidak melihat output dari console.log dari kode yang saya uji kecuali saya secara eksplisit menyetel verbose ke false atau menghapus flag --forceExit (yang saya gunakan sementara).

Melihat perilaku yang sama persis seperti yang dinyatakan di atas. [email protected] , [email protected].

console.logging sebelum done() dipanggil, namun output tidak ditampilkan dengan --forceExit . Ketika --forceExit dihapus, output console.log ditampilkan di akhir.

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

Jadi, bukankah solusi yang jelas di sini sebelum memaksa keluar dari flush apa pun yang dimiliki buffer output secara internal?

Kami memiliki kasus uji untuk itu: https://github.com/facebook/jest/blob/497be7627ef851c947da830d4a8e21046f847a78/integration-tests/__tests__/console_log_output_when_run_in_band.test.js#L24 Apakah entah bagaimana rusak?

Adakah yang bisa mengatur repo reproduksi yang bisa kita lihat?

Tambahan cepat: jest --no-cache sepertinya juga berarti console.logs tidak muncul.

Dengan Node 9.7.1, dan lelucon 22.4.2 dengan babel 7 menggunakan verbose tampaknya berfungsi dengan baik untuk menampilkan log konsol dari dalam pengujian:

package.json

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

Sudah beberapa waktu sejak ini tidak memerlukan intervensi pengguna, tetapi tampaknya obatnya konsisten.

Masalah ini juga telah mengganggu kami untuk beberapa waktu sekarang, pertama dengan output yang terpotong secara acak, sekarang output benar-benar diabaikan. Untuk mereproduksi, klon cabang dev/dexie-search-index dari repo ini:
[email protected] :WorldBrain/Memex.git

Tambahkan baris ini di suatu tempat di insertTestData() di src/search/index.test.ts:
console.log('!?!?!?!!?!?!!?'); expect(1).toBe(2)

Diuji dengan Node.js versi 6.11 dan 8.10. Harap selesaikan ini sesegera mungkin, karena ini membuat pengkodean jauh lebih lambat :(

@frankred terima kasih. Saya mengatur verbose: "false" dan berhasil.

Menemukan masalah ini https://github.com/evanw/node-source-map-support/issues/207 kemarin dan sepertinya sangat mirip dengan masalah ini di sini.

Alasan mengapa hal ini bermasalah adalah karena penulisan ke process.stdout di Node.js terkadang tidak sinkron dan dapat terjadi pada banyak centang pada loop peristiwa Node.js. Memanggil process.exit(), bagaimanapun, memaksa proses untuk keluar sebelum penulisan tambahan ke stdout dapat dilakukan.

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

Saya belum memeriksa kodenya, tetapi jika process.exit() digunakan dengan --forceExit , itu akan menjelaskan mengapa keluaran log hilang.

Baru saja menambahkan solusi yang berhasil untuk saya dalam masalah terkait ini: https://github.com/facebook/jest/issues/3853#issuecomment -375183943

@ledbit Itu tidak berhasil untuk saya. Wow masalah yang telah berlangsung satu setengah tahun dan masih belum ada solusi.

Itu benar, tetapi masih belum banyak yang bisa dikembangkan oleh para pengembang.

Saya menemukan masalah ini paling sering dalam panggilan asinkron bersarang dalam contoh asinkron. Saya tidak begitu yakin dengan orang lain, tetapi menunjukkan penggunaan console.log pasti akan membantu untuk menyelesaikan ini.

Itu pasti terjadi pada saya. Apa yang Anda butuhkan dari saya sehingga Anda dapat memperbaikinya?

Pada 22 Maret 2018, pukul 08.32, Dennis Brown [email protected] menulis:

Itu benar, tetapi masih belum banyak yang bisa dikembangkan oleh para pengembang.

Saya menemukan masalah ini paling sering dalam panggilan asinkron bersarang dalam contoh asinkron. Saya tidak begitu yakin dengan orang lain, tetapi menunjukkan penggunaan console.log pasti akan membantu untuk menyelesaikan ini.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub https://github.com/facebook/jest/issues/2441#issuecomment-375349444 , atau nonaktifkan utasnya https://github.com/notifications/unsubscribe-auth/ADrayIO4NBB2dZM1XL8ZQO32W9SUnu2Yks5UvZ8 .

Lebih baik lagi, lakukanlah! Inilah repo saya. https://github.com/RALifeCoach/handandfootserver.git

Jalankan lelucon dari npm atau jalankan dari baris perintah. Anda akan melihat bahwa ada banyak, banyak console.logs, tetapi sebagian besar ditutup-tutupi.

Di sana - tim pengembang memiliki semua yang mereka butuhkan. Harap perbaiki masalah ini.

Pada 22 Maret 2018, pukul 08:36 , Christopher Oliphant

Itu pasti terjadi pada saya. Apa yang Anda butuhkan dari saya sehingga Anda dapat memperbaikinya?

Pada 22 Maret 2018, pukul 08:32, Dennis Brown < [email protected] [email protected] > menulis:

Itu benar, tetapi masih belum banyak yang bisa dikembangkan oleh para pengembang.

Saya menemukan masalah ini paling sering dalam panggilan asinkron bersarang dalam contoh asinkron. Saya tidak begitu yakin dengan orang lain, tetapi menunjukkan penggunaan console.log pasti akan membantu untuk menyelesaikan ini.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub https://github.com/facebook/jest/issues/2441#issuecomment-375349444 , atau nonaktifkan utasnya https://github.com/notifications/unsubscribe-auth/ADrayIO4NBB2dZM1XL8ZQO32W9SUnu2Yks5UvZ8 .

@RALifeCoach melihat repo Anda sekarang, ada sedikit logging di sana. Keberatan menunjukkan logging mana yang Anda lewatkan?

Menjalankannya. Anda akan melihat beberapa keluaran, tetapi banyak yang ditimpa.

Pada Sabtu, 14 April 2018, 03:10 Simen Bekkhus [email protected]
menulis:

@RALifeCoach https://github.com/RALifeCoach melihat repo Anda sekarang,
ada sedikit logging di sana. Pikiran menunjukkan yang masuk
tertentu Anda hilang?


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/facebook/jest/issues/2441#issuecomment-381318608 , atau bisukan
benang
https://github.com/notifications/unsubscribe-auth/ADrayHQCc8C0NmMmrtE7mEo2jN999CChks5tocsKgaJpZM4LVbUv
.

Saya tidak yakin apa yang Anda maksud dengan ditimpa. Apakah sesuatu yang keluar ke konsol kemudian dihapus?

Jika enam baris ditulis menggunakan console.log 6 muncul sebentar dan kemudian
ringkasan tes tumpang tindih beberapa dari 6 baris.

Pada Sabtu, 14 April 2018, 8:58 Simen Bekkhus [email protected]
menulis:

Saya tidak yakin apa yang Anda maksud dengan ditimpa. Apakah sesuatu keluaran ke
konsol kemudian dihapus?


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/facebook/jest/issues/2441#issuecomment-381339074 , atau bisukan
benang
https://github.com/notifications/unsubscribe-auth/ADrayF0P5SqpHjaAAYcPaIAF7ubSMVRTks5tohyIgaJpZM4LVbUv
.

Saya juga mengalami apa yang dijelaskan oleh

Sepertinya ini masih menjadi masalah, bahkan pada node 8.11.1. Mungkin kita harus mengajukan bug baru dan merujuk kembali ke sini?

Masih memiliki masalah yang sama di simpul v8.9.0.

Saya dapat mengonfirmasi komentar @RALifeCoach tentang keluaran log yang "ditimpa" -- Saya akhirnya membuat log muncul dengan menandai masing-masing log dengan string karakter tertentu (misalnya @@@ ) dan menjalankan:

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

Ini adalah peretasan yang mengerikan (Anda kehilangan semua pewarnaan konsol, tetapi Anda masih melihat kegagalan pengujian dan ringkasan pengujian akhir) tetapi itu satu-satunya hal yang berhasil sejauh ini. Saya mencoba yang lainnya di komentar di atas. Perhatikan bahwa --verbose arg diperlukan untuk solusi ini (dan secara implisit digabungkan dengan --watch melalui react-scripts ).

[Menggunakan react-scripts bercabang untuk menggunakan Jest v23.0.0 terbaru, simpul v8.11.2]

Menyiapkan "verbose": true di package.json membantu. Log muncul di bagian bawah output.

Man untuk masalah tertutup Saya masih melihat orang mengeluh tentang ini sejak dibuat 2 tahun yang lalu.

Saya pikir ada beberapa kode di Jest yang mempermainkan kami dan "membajak" console.log(),
membuatnya menjadi larangan, sesuatu seperti...

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

Obat untuk mengatur ulang console.log adalah, cukup ironis -- lihat https://stackoverflow.com/questions/7089443/restoring-console-log
-- untuk menghapus console.log

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

...dan tiba-tiba -- Voila! -- seperti Phoenix dari api -- console.log() bekerja lagi di Jest...!
Jest bahkan mencetak "console.log (info lokasi)" sebelum mencatat pesan Anda...

>

console.log __tests__\libarray-helpers.test.js:35
Dapatkah Anda mendengar saya sekarang, Jesters...?

Juga, saya telah menggunakan "logatim" isomorfik akhir-akhir ini https://www.npmjs.com/package/logatim sebagai pengganti console.log(), dan itu
tampaknya kebal terhadap upaya pembajakan Jest...(mungkin itu me-reset console.log...)

Anda bahkan dapat terlebih dahulu "membajak" console.log sendiri untuk logatim
untuk mencatat pesan level "info" berwarna hijau...

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

(Tolong jangan menafsirkan kejenakaan saya sebagai sifat suka berperang... di mana kesenangan dalam menamai produk yang bagus Bercanda jika Anda tidak bisa bercanda tentang hal itu sedikit saja...)

Sebelum menyebarkan kebencian, @yanshuf0 , pertimbangkan alat gratis dan terbuka yang jelas-jelas Anda

Saya mengalami masalah "menimpa" ini (Windows 10, terminal Kode VS, proyek node.js) dan kemudian ketika saya mengutak-atiknya, bug berhenti terjadi. Saya pikir itu berhenti terjadi karena saya berhenti menggunakan --watch atau karena saya menambahkan opsi "verbose": false , tetapi mengembalikan perubahan itu tidak membuat bug kembali.

Saya harus bertanya, apakah Jest sengaja tidak mengaitkan keluaran log dengan tes yang menghasilkannya? Untuk sementara semua keluaran konsol berada di bawah semua hasil pengujian, tetapi sekarang ditampilkan di atas semua hasil pengujian. Sangat acak.

--watchAll bendera memblokirnya. sekarang bekerja untuk saya

Setelah menggunakan lelucon selama berbulan-bulan, ini terjadi pada saya juga tiba-tiba dengan node 8.9. Satu menit console.log keluar dengan baik, selanjutnya berhenti bekerja. Saya berakhir di utas ini dan mencoba beberapa hal. Tidak menggunakan --watch memperbaiki masalah, tetapi kemudian saya harus menjalankan kembali perintah pengujian saya setiap kali. Menggunakan --watch --verbose false memperbaiki masalah dan secara otomatis menjalankan pengujian saya.

Menemukan masalah yang sama di sini, terima kasih untuk perbaikan sementara @bkempner

Dapat mengonfirmasi bahwa ini adalah masalah di 22.4.4 dan 23.4.1 (saat ini pada komentar ini). Bendera yang saya gunakan adalah:

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

Masalah lain pada topik yang sama menyarankan untuk menambahkan opsi --json , yang berhasil untuk sementara waktu... Mungkin beberapa ketergantungan telah berubah sejak saat itu, tetapi keluaran STDOUT dan STDERR selalu ditekan. Yang paling dekat dengan apa pun yang berhasil adalah menggunakan --watch ; terkadang beberapa keluaran akan ditempelkan di bagian akhir tanpa ditimpa.

Saya menemukan --silent benar secara default, setel ke false akan menampilkan console.log: jest --silent=false

Sepertinya banyak laporan tentang ini, ada sesuatu yang jelas masih rusak. Ini ditutup sebagai penipuan #2166 yang sekarang ditutup, tetapi ini tetap ada.

@thymikee Bisakah kita membuka kembali masalah ini?

Saya membuka kembali ini, karena masalahnya sudah kembali sebagian dan kami harus memperbaikinya.

Di v23 masalah muncul dalam mode tontonan, karena kami telah mengubah cara kerjanya di bawah kap untuk hampir selalu menjalankan tes secara paralel, sehingga TTY tidak diblokir dan seseorang dapat membatalkan tes yang berjalan lama dengan mudah: https://github. com/facebook/jest/pull/6647.
Satu-satunya kasus kita tidak menelurkan pekerja dalam mode menonton adalah ketika kita memiliki tepat 1 tes untuk dijalankan dan itu relatif cepat (berjalan di bawah 1s) – dalam hal ini kita masih harus melihat console.log s muncul seperti biasa.

Dalam kasus saya, menjalankan semua tes dalam mode tontonan tidak masuk dengan benar. Jika saya menggunakan mode pola untuk memfilter hanya satu kelas pengujian, maka logging akan terpotong

Sesuai komentar oleh @davidgilbertson (https://github.com/facebook/jest/issues/2441#issuecomment-286248619) menghapus verbose: true di package.json saya dan menghapus --verbose dari saya flag baris perintah memungkinkan saya untuk melihat log konsol yang sebelumnya disembunyikan. Itu cukup membingungkan.

Saya memiliki verbose: true di package.json saya dan saya menemukan bahwa pernyataan console.log kadang-kadang ada dan kadang-kadang tidak (jika saya memiliki 10 di semua yang digabungkan, mereka tampaknya muncul, tetapi tidak hanya untuk satu) - Saya pikir ini mungkin masalah asinkron

Saya memiliki masalah ini kadang-kadang juga, saya mengaktifkan runInBand (https://jestjs.io/docs/en/cli.html#runinband) dan itu memperbaikinya.

@ndelangen itu penasaran - Saya ingin tahu apakah itu mungkin masalah async. Saya pikir Jest mengumpulkan semua console.logs dan kemudian mencetaknya di akhir, bukan?

Masalahnya berulang sekarang meskipun saya tidak menggunakan verbose .

--runInBand tidak memperbaikinya untuk saya. Satu-satunya solusi yang dapat diandalkan sejauh ini adalah dengan mencatat sesuatu beberapa kali sehingga beberapa output tidak ditimpa oleh lelucon.

Saya telah melakukan beberapa analisis, menambahkan beberapa komentar dan berhasil membuat tambalan parsial di sini:

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

edit:

repo yang berisi kode untuk direproduksi dengan mudah tersedia di sini: https://github.com/spion/jest-logging-repro

analisis ouput di sini: https://Gist.github.com/spion/bbb34c5abc1230a37ad5f4f01336b8df

Patchnya sebagian karena

  • banyak tes integrasi gagal sekarang karena perubahan yang diperlukan dalam output
  • terkadang (sayangnya) output log muncul setelah pembaruan status terakhir - alasannya mungkin adalah fakta bahwa aliran proses anak akan memerah setelah proses anak mengirimkan pesan sukses ke induk.

@philraj masalah yang sama untuk saya.. saya harus masuk beberapa kali untuk melihat pesan log yang dimaksud dengan andal

bagaimana ini bukan masalah utama dan tidak segera diselesaikan? bagaimana ada masalah ini terbuka sejak 2016??

Pembaruan: Dengan tambalan ini, saya hanya memiliki 8 tes yang gagal:

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).

Mereka terutama tentang tidak mengharapkan FORCE_COLORS di process.env, hg scm dan packages/jest-runner/src/__tests__/test_runner.test.js tidak sepenuhnya mengejek aliran (jadi tidak ada metode pipa pada mereka.

Pada tingkat ini saya akan dapat mengirimkan PR yang diperbaiki minggu depan ini... asalkan saya menemukan perbaikan untuk keluaran log yang muncul setelah seluruh laporan selesai.

Seperti yang dikatakan @bkempner , menggunakan --watch --verbose false memperbaiki masalah.

Output konsol di --watch ditimpa oleh lelucon yang menggerakkan kursor konsisten dengan apa yang saya lihat. Ada/tidaknya --verbose , --maxWorkers 1 , --runInBand tidak menghasilkan kesuksesan.

Solusi saya saat ini adalah jest --watch | cat . Saya kehilangan semua warna dan tetap berada di bagian atas jendela, tetapi saya mendapatkan output konsol.

Atau, TERM=dumb jest --watch . Saya kalah dengan tetap berada di bagian atas jendela, tetapi saya mendapatkan warna dan output konsol.

Saya memiliki masalah yang sama.

Apa yang berhasil bagi saya adalah menggunakan console.debug

TERM=dumb memperbaikinya untuk saya juga

FWIW, TERM=dumb memperbaikinya untuk saya juga

menonaktifkan verbose di konfigurasi lelucon berhasil untuk saya 0_o\

Menambahkan --verbose false ke skrip package.json "test" memecahkan masalah bagi saya. Saya tidak akan pernah menemukan itu tanpa utas ini.

misalnya

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

Aneh bagaimana beberapa konsol terakhir menghilang tetapi tidak semuanya, perbaiki dengan --verbose false di perintah arloji saya.

Bekerja dengan baik ketika Anda menjalankan tanpa --watch jadi itu adalah sesuatu tentang flag arloji yang melakukannya.

Yang sangat ironis adalah bahwa itu lebih bertele-tele ketika console.log berfungsi!

Saya sudah mulai memperhatikan masalah ini dengan verbose di Jest 23.6, saya memutar kembali ke 23.5 dan saya masih melihatnya. Jika saya menjalankan --clearCache ini memperbaiki verbose untuk sementara waktu sampai gagal lagi. Saya tidak jelas apa pemicunya, seperti banyak kegagalan log atau semacamnya. Setelah itu terjadi tampaknya menyebabkan Jest merusak cache. Saya mencoba --verbose false dan melihat apakah itu mencegahnya maju.

Terima kasih @jamespolanco Menggunakan opsi --clearCache memperbaiki masalah saya (untuk saat ini). Saya akan menjalankan pengujian saya menggunakan opsi --no-cache dan melihat apakah itu mencegah masalah berulang di masa mendatang.

EDIT: Saya seharusnya menyebutkan bahwa masalah saya adalah hanya beberapa pesan console.log yang dicetak. Saya menggunakan 5 baris console.log dalam satu tes dan hanya 3 baris pertama yang dicetak. Menggunakan --clearCache memperbaiki masalah ini untuk saya. Mungkin ada masalah lain di mana console.log muncul?

Saya mengalami masalah ini juga. Saya telah mencoba menggunakan console.log, console.debug, dan console.error. Saya juga telah mencoba menggunakan flag --no-cache. Dalam semua kasus, pernyataan konsol saya benar-benar diabaikan.

Saya mengalami masalah ini dalam mode menonton juga. Versi 23.6.0

Saya bahkan merekamnya jika ada yang suka melihat sendiri:
asciicast

seperti yang lain-hanya dihapus saat dijalankan dengan --watch . Mencoba --verbose false dan itu tidak membantu.

Saya juga mengalami masalah yang sama.

Saya juga mengalami ini saat menggunakan verbose atau saat dalam mode menonton

Percaya atau tidak saya terkadang log melempar Kesalahan. Juga melakukan node --inspect node_modules/.bin/jest --runInBand mypath/to/my.test.js menunjukkan keluaran console.log dalam kasus saya.

Simpul v9.11.1
Lelucon: v23.6.0

Konfigurasi lelucon di package.json :

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

Saya mengonfirmasi masalah ini dengan verbose. Masalahnya adalah penghitungan jumlah baris kacau saat verbose aktif.

Jika ada yang bisa mengarahkan saya ke tempat di mana ia mencetak pesan, saya bisa menusuknya.

Anda dapat mengurangi penerbitan menggunakan jest-watch-toggle-config untuk saat ini.

Atur seperti ini:

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

Saat Anda menjalankan pengujian, tekan v untuk mengaktifkan verbose dan kemudian v lagi untuk menonaktifkannya .

Setelah itu, selama Anda tidak menggunakan verbose, Anda dapat melihat semua log.

--verbose=false memperbaiki masalah saya saat menguji enzim dangkal . Namun, console.logs bekerja tanpa perbaikan untuk enzyme mount .

Itu menunjukkan perbedaan antara bagaimana kesalahan dicatat oleh react-test-renderer, versus bagaimana mereka dicatat oleh renderer bawaan reaksi (karena enzim tidak mengacaukan fungsi konsol sama sekali)

FYI PR ini memperbaiki masalah bagi saya - https://github.com/facebook/jest/pull/6871

Ini belum siap, mungkin perlu perubahan dalam pendekatan - tetapi itu menampilkan semua data yang dicatat dalam mode verbose.

Belum memperbarui (menjalankan lelucon 22.4.2) tetapi menggunakan mode tontonan, log saya tidak akan ditampilkan. Berjalan dengan --runInBand memperbaikinya dalam mode tontonan.

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

Saya juga belum memperbarui (Jest 23.6.0), dan menjalankan dengan "jest --watch --verbose=false" juga memperbaikinya untuk saya.

Akan senang bagi orang yang memiliki masalah untuk menguji PR yang disebutkan di atas. Ini tersedia di jest@beta ( 24.0.0-alpha.9 sekarang)

Jadi benang tambahkan jest@beta?

ons. 19. des. 2018 kl. 16:46 skrev Simen Bekkhus [email protected] :

Akan senang bagi orang yang memiliki masalah untuk menguji PR yang disebutkan di atas. Dia
tersedia di jest@beta (24.0.0-alpha.9 sekarang)


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/facebook/jest/issues/2441#issuecomment-448641697 , atau bisukan
benang
https://github.com/notifications/unsubscribe-auth/AAM5P7ijQjSbWB0-zzDCfC9Uggyk5RGoks5u6l9EgaJpZM4LVbUv
.

>


Tarjei Huse
Mobil: 920 63 413

@tarjei , ya:

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

Ini bekerja untuk saya. 🎉

Ini benar-benar konyol tetapi untuk berjaga-jaga jika itu membantu orang lain, saya sedang mengerjakan proyek baru (bagi saya) - lelucon sedang berjalan dengan opsi --silent yang menonaktifkan output. Menghapus itu dan saya melihat log sekarang ️

Perhatikan ketika verbose diaktifkan (saya mengaktifkannya menggunakan jest-watch-toggle-config ), beberapa log konsol diblokir dalam versi beta.

--verbose=salah

Ini berhasil untuk saya.

Saya perhatikan bahwa beberapa console.log() berfungsi sementara yang lain tidak dalam pengujian saya (simpul 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
*/

Ada sesuatu yang sangat aneh terjadi, dengan async tes di mana console.log dalam tes async tidak dicatat, juga yang setelah await tidak dicatat.

Tambahkan lebih banyak console.log dalam pengujian async dan Anda akan mulai melihat perilaku yang lebih aneh seperti beberapa log setelah await tiba-tiba bekerja ️ ️

Jadi, apa yang ditulis @philwhln di atas dua tahun lalu

Karena saya tidak dapat mengisolasi ini dalam tes sederhana, saya kira ini ada hubungannya dengan menjalankan tes asinkron yang lebih kompleks.

Tampaknya memiliki beberapa kebenaran untuk itu.

--verbose=salah

Juga bekerja untuk saya dalam kasus ini.

@DanweDE dapatkah Anda memeriksa apakah alpha terbaru yarn add jest<strong i="6">@beta</strong> --dev memperbaiki masalah untuk Anda, bahkan dengan verbose diatur ke true ?

Menambahkan --verbose false memperbaiki masalah. Itu sepertinya agak tidak intuitif :)

Apakah ini tetap? Saya masih tidak melihat console.logs di "jest": "23.6.0"

@iDVB Jika Anda membaca utas beberapa komentar di atas, Anda akan melihat ada versi beta yang seharusnya memperbaiki masalah. Coba itu dan laporkan jika itu menyelesaikan masalah Anda untuk membantu @spion

Juga semua orang yang datang ke sini untuk mengatakan --verbose false atau --verbose true atau kombinasi flag atau versi Node atau Jest apa pun memperbaiki masalah mereka, silakan coba versi beta dan laporkan jika itu memperbaiki masalah Anda tanpa solusi Anda.

log konsol di kelas yang saya uji memang muncul

@philraj kami telah beralih ke versi beta "24.0.0-alpha.9" di @leaplabs dan berfungsi dengan sempurna. Dalam artian saya tidak melihat log apa pun yang hilang sejak kami memutakhirkan.

Dapat mengonfirmasi juga, berfungsi pada 24.0.0-alpha.9 tanpa argumen baris perintah apa pun.

Saya relatif baru dalam React dan Jest. Saya tidak bisa mendapatkan log yang konsisten menggunakan default dari create-react-app. Saya dikeluarkan dan sekarang log berfungsi dengan baik. Saya tidak berpikir mendepak mengubah versi Jest. Mungkin itu hanya mengubah salah satu pengaturan untuk cara Jest berjalan. Ini dengan 23.6.0 .

Saat menggunakan 24.0.0-alpha.16 Saya tidak melihat log konsol apa pun kecuali saya menambahkan verbose=false .

Saya mendapatkan hasil yang cukup tidak konsisten dengan ini juga di [email protected]. Jika saya menjalankan dalam mode menonton semua (a) maka saya dapat melihat output konsol, tetapi tidak jika saya menjalankan dalam mode menonton perubahan terkait (o)?

--verbose=false memperbaiki ini untuk saya juga

Saya menggunakan 24.1.0 dan berfungsi bahkan tanpa opsi verbose. Namun, itu tidak menampilkan pernyataan console.log dalam file pengujian ketika file pengujian berisi mis. referensi ke kelas, yang tidak diimpor. Sebagai contoh

image

Itu kesalahan dari ts-jest dan tidak terlalu relevan di sini

Ya, tetapi ketika kesalahan itu terjadi, keluaran log konsol tidak ditampilkan. Apakah itu masih relevan untuk ts-jest ? Saya tidak begitu akrab dengan apa yang menjadi tanggung jawab setiap perpustakaan di sekitar lelucon.

IDK bagaimana ts-jest bekerja, tetapi jika tidak menjalankan tes apa pun pada kesalahan tipe, itu akan menjelaskan mengapa mereka hilang - kode tidak pernah berjalan

Saya masih berjuang untuk mendapatkan console.log bekerja di sini. Saya kadang-kadang mendapatkan log tetapi tampaknya tidak ada pola keberhasilan yang terlihat.

Saya menggunakan Jest 24.7.1 dan juga mencoba 24.7.1 dan 24.2.0-alpha.0 .

Menyetel verbose=false dan verbose=true keduanya gagal memberikan perbaikan.

Saya juga telah mencoba menggunakan node v10.8.0 dan v6.17.1 , juga tanpa perbaikan.

Apakah ada yang kurang disini?

@mulholio apakah Anda 100% yakin Anda menjalankan lelucon yang diinstal secara lokal? Saya melaporkan masalah di masa lalu yang hanya terjadi karena saya memiliki paket versi global lama yang sedang berjalan alih-alih yang diinstal secara lokal.

Ya, tidak ada versi global Jest yang diinstal

saya dapat mengkonfirmasi bahwa itu belum diselesaikan. terkadang console.log berfungsi dan terkadang tidak, betapa bingungnya saya.
lingkungan saya sebagai berikut:
lelucon 23.6.0
simpul v8.13.0
dan jest.config.js saya

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"],
}

ya, setelah menghapus verbose:true , sepertinya baik-baik saja

Saya juga melihat bug ini, dapatkah kami membuka kembali masalah ini?

FYI: Jika saya menggunakan fit untuk menjalankan satu tes, console.log s saya tidak menghasilkan apa-apa. Ketika saya menjalankan seluruh rangkaian pengujian, console.log s bekerja dengan baik.

Menghadapi masalah yang sama, beberapa log konsol "dimakan". Bagi mereka yang mengalami masalah ini, dapatkah Anda memverifikasi tetapi mengkloning beberapa log konsol?

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

Sepertinya buffer untuk pernyataan [PASS] sedang menulis di 2 baris log konsol terakhir (saya dapat melihat bagian dari nomor baris log konsol di akhir pernyataan Pass)

+1000

terdengar sangat konyol tetapi pastikan Anda yarn build sebelum tes!

Masih tidak ada output dengan --verbose=true atau --verbose=false saat menggunakan [email protected] - tidak yakin mengapa masih menjadi masalah 3 tahun setelah awalnya dicatat.

Sudahkah Anda mencoba menggunakan flag lelucon --runInBand untuk melihat apakah itu menyelesaikannya dengan menjalankan tes secara serial? Seseorang menyebutkan ini kepada saya, tetapi belum memiliki kesempatan untuk mengujinya.

Terima kasih, Ini berhasil! Tetapi mengapa tidak mengaturnya secara default untuk memiliki output dari console.log..

Ini masih menjadi masalah bagi saya, [email protected]

Saya menemukan perbaikan sebenarnya, 2 baris terakhir di testcase terakhir (cascading up) ditimpa jadi, jadikan ini test case terakhir Anda

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");
});

Bagi mereka yang menggunakan ts-jest , saya harus mematikan diagnostik untuk melihat console.logs
jest.config.js

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

Bagi mereka yang menggunakan ts-jest , saya harus mematikan diagnostik untuk melihat console.logs
jest.config.js

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

Opsi ini tidak berhasil untuk kami. Kami juga mencoba menyetel verbose = false yang juga tidak membantu.

Lingkungan kita:

  • Node 10.16.0
  • bercanda 24.8.0
  • ts-jest: 24.0.2
  • naskah 3.5.2
  • @types/bercanda 24.0.15

Sepertinya buffer untuk pernyataan [PASS] sedang menulis di 2 baris log konsol terakhir (saya dapat melihat bagian dari nomor baris log konsol di akhir pernyataan Pass)

Ini tampaknya menjadi masalah bagi saya ([email protected]). Di sistem saya, jalur keluaran terminal dengan [PASS] muncul untuk mem-flash beberapa konten sebelum dihapus.

Mengalami masalah ini juga.

Saya tidak dapat masuk dengan salah satu solusi di atas, tetapi sebagai solusinya saya hanya berharap gagal dengan nilainya dan memeriksa perbedaannya:

expect(thingIWantToLog).toBe({})

Mengalami ini juga: tampaknya output "LULUS: ..." menimpa stdout, jadi console.log "terakhir" Anda akan dimakan.

Jika --verbose=false tidak berfungsi, Anda dapat menambahkan banyak baris baru ( \n ) ke console.log terakhir Anda.

Sudahkah Anda mencoba menggunakan flag lelucon --runInBand untuk melihat apakah itu menyelesaikannya dengan menjalankan tes secara serial? Seseorang menyebutkan ini kepada saya, tetapi belum memiliki kesempatan untuk mengujinya.

Menambahkan tanda ini membantu menyortir masalah.
Dari waktu ke waktu itu juga tidak menampilkan keluaran console.log.
Menggunakan perintah ini:
npm test -- --verbose --runInBand -t "My Test Name"

Versi Node dan NPM:
node v8.16.0
npm 6.4.1

Ini adalah solusi saya:

npm install --save-dev sprintf-js

Dalam lelucon Anda setupTest.js , atau di mana pun:

import {sprintf} from 'sprintf-js';

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

Masih tidak ada output dengan --verbose=true atau --verbose=false saat menggunakan [email protected] - tidak yakin mengapa masih menjadi masalah 3 tahun setelah awalnya dicatat.

Ini jest.config.js dan itu berhasil untuk saya.
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,
};

Kemudian di package.json saya punya:

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

Kemudian jalankan test suite spesifik Anda dengan perintah ini:

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

--verbose=false tampaknya berhasil untuk saya. Terima kasih!

Sembunyikan log dan peringatan saat Anda melewati opsi --silent
Coba yarn jest itu akan berhasil

Bug ini sangat mengganggu... 3 tahun...

matikan --diam
dan untuk tes ts menggunakan solusi ts-jest @mr-madamin bekerja untuk saya!

Tidak menggunakan verbose atau silent , telah mencoba --runInBand , TERM=dumb , menjalankan semua tes vs. file tes tunggal, dan console.log muncul ketika ditempatkan di blok pengaturan tetapi tidak di dalam blok it() .

Ketika semuanya gagal, Anda masih dapat melakukan:

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

Tapi saya merasa seperti manusia gua yang menggunakan batu untuk memecahkan kacang.

edit: "jest": "^24.9.0"

Saya menggunakan perintah ini dan berfungsi:

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

Anda dapat menentukan Nama Pengujian Anda setelah tanda -t untuk menjalankan pengujian individual atau grup pengujian di bawah deskripsi() yang sama .

Tidak menggunakan verbose atau silent , telah mencoba --runInBand , TERM=dumb , menjalankan semua tes vs. file tes tunggal, dan console.log muncul ketika ditempatkan di blok pengaturan tetapi tidak dalam blok it() .

Ketika semuanya gagal, Anda masih dapat melakukan:

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

Tapi saya merasa seperti manusia gua yang menggunakan batu untuk memecahkan kacang.

edit: "jest": "^24.9.0"

Saya senang akhirnya mulai menggunakan lelucon di bagian belakang untuk keseragaman. Sebagai gantinya, saya mengalami masalah ini dan sampai sekarang saya beralih kembali ke mocha/proxyquire. Tidak ada output console.log terlihat (dalam modul atau kasus uji) dan setelah menghabiskan beberapa jam untuk itu, tidak ada solusi yang tampaknya membantu. Tidak tertarik pada solusi apa pun yang melibatkan masuk ke file ...

Diuji terhadap node 8/10 LTS dengan "jest": "^24.9.0",

Ya. Aku di tepi juga. Sepertinya ini lebih populer di sini untuk menutup masalah, dan merekomendasikan peretasan alih-alih memperbaiki titik nyeri yang jelas selama lebih dari 3 tahun.

Halo samlevin dan pavelloz,
Sudahkah Anda mencoba opsi ini?

Saya menggunakan perintah ini dan berfungsi:
npm test -- --runInBand -t "My Test Name"

Anda dapat menentukan Nama Pengujian Anda setelah tanda -t untuk menjalankan pengujian individual atau grup pengujian di bawah deskripsi() yang sama.
Bisakah Anda memberi tahu saya jika itu berhasil? Karena saya telah menggunakannya untuk sementara waktu sekarang.

Berikut adalah screen shoot dengan contoh kode dan output.
CATATAN bahwa: jika Anda tidak tahu, console.lg dicetak di atas semua laporan lain, dan bukan di akhir di mana Anda melihat laporan cakupan kode atau kesalahan berlanjut.
Jest test console log

Versi Node dan NPM saya:

node v8.16.0
npm 6.4.1

Saya senang akhirnya mulai menggunakan lelucon di bagian belakang untuk keseragaman. Sebagai gantinya, saya mengalami masalah ini dan sampai sekarang saya beralih kembali ke mocha/proxyquire. Tidak ada output console.log terlihat (dalam modul atau kasus uji) dan setelah menghabiskan beberapa jam untuk itu, tidak ada solusi yang tampaknya membantu. Tidak tertarik pada solusi apa pun yang melibatkan masuk ke file ...

Diuji terhadap node 8/10 LTS dengan "jest": "^24.9.0",

Saya telah menguji setiap solusi di utas ini.

Hanya untuk memeriksa apakah tidak ada yang berubah dalam hal ini:
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",

Sunting

CATATAN bahwa: jika Anda tidak tahu, console.lg dicetak di atas semua laporan lain, dan bukan di akhir di mana Anda melihat laporan cakupan kode atau kesalahan berlanjut.

Saya bahkan tidak memeriksa bagian bawah laporan, tapi di situlah log saya mendarat. Jadi saya kira itu berhasil, hanya saja tidak secara konsisten/dengan cara yang sama untuk semua orang.

image

Terima kasih untuk bantuannya.

Pertanyaannya adalah seberapa besar pengaruhnya terhadap kinerja, tetapi itu untuk hari lain, logging lebih penting.

Anda benar @pavelloz , ketika Anda menjalankan tes dengan opsi --runInBand, akan membutuhkan lebih banyak waktu untuk menyelesaikan tes karena melakukan ini:

--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.

Jadi yang saya lakukan adalah hanya menggunakan opsi itu ketika saya perlu men-debug masalah pada tes.
Di lain waktu, jalankan tes secara normal.

Bersulang

komponen const = dangkal(...)
console.log(component.debug())

Sungguh luar biasa ini belum diperbaiki.

@ivandosreisandrade Saya dapat memverifikasi solusi flag runInBand tetapi saat ini saya lebih suka tidak membuang waktu menambahkan langkah ekstra untuk pengembang lain, dan telah kembali ke sesuatu yang berperilaku seperti yang diharapkan di luar kotak. akan tetap berlangganan untuk melihat apakah ada perubahan dalam hal ini

Saya sudah mencoba semuanya di utas ini dan masih tidak dapat melihat output untuk console.log. --runInBand tidak menyelesaikan masalah bagi saya. Menggunakan node@12 dan lelucon terbaru. Men-debug dengan web dev cukup sulit, akan sangat berguna jika saya setidaknya bisa mencetak ke layar untuk melihat mengapa pengujian unit saya gagal

@u84six sudahkah Anda mencoba solusi saya?
Inilah tautan ke jawaban saya di pos.
https://github.com/facebook/jest/issues/2441#issuecomment -552368939

Bersulang

@ivandosreisandrade yang terjadi adalah jika ada kesalahan dalam kode (seperti mereferensikan nilai yang tidak ditentukan), itu tidak akan dicetak, bahkan jika panggilan console.log sebelum kesalahan. Jika semuanya dalam tes lulus, maka saya akan melihat log. Perilaku semacam itu membuatnya sama sekali tidak berguna untuk debugging.

@ivandosreisandrade seperti apa package.json Anda? Saya mencoba mengikuti ini:

tes npm -- --runInBand -t "Nama Tes Saya"

Tapi saya sudah mengaturnya seperti ini di package.json saya

" test:unit ": "bercanda --verbose"

Anda akan berpikir bahwa dengan flag --verbose, itu akan memungkinkan console.log untuk melewatinya, tapi saya masih tidak bisa membuat console.log bekerja. Sangat membuat frustrasi!

@ivandosreisandrade seperti apa package.json Anda? Saya mencoba mengikuti ini:

tes npm -- --runInBand -t "Nama Tes Saya"

Tapi saya sudah mengaturnya seperti ini di package.json saya

" test:unit ": "bercanda --verbose"

Anda akan berpikir bahwa dengan flag --verbose, itu akan memungkinkan console.log untuk melewatinya, tapi saya masih tidak bisa membuat console.log bekerja. Sangat membuat frustrasi!

@u84six ini paket saya.json

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

TestMatch Anda mengizinkan file .js atau .jx atau .jsx , dan moduleFileExtensions Anda hanya mengizinkan .js . Sepertinya ada yang salah di sana.

Itu tidak relevan dengan penyebabnya :man_shrugging:
Itu hanya file mana yang harus ditemukan dan menjalankan tes terhadap mereka.

Saya tidak yakin mengapa masalah ini ditutup. Jadi ini versi simpul saya - 13.12.10, npm -6.14.4
lelucon -24.9.0

Ini adalah tes dasar dengan mock-fs
impor tiruan dari 'mock-fs';
impor * sebagai fs dari 'fs';
impor pompa dari 'pompa';
impor * sebagai util dari 'util';

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', () => {

    });
});

Saya tidak yakin mengapa ini terjadi. Apakah ini karena loop peristiwa di mana console.log dibuat untuk dianggap diproses di nextTick() hanya setelah eksekusi spesifikasi pengujian. Maaf untuk mengemukakan ini, tetapi tampaknya membosankan untuk men-debug setiap kasus uji, daripada hanya melakukan konsol o/p dan memeriksa data req.

Karena Anda harus mengembalikan janji filePromisy Anda untuk bercanda sehingga ia tahu kapan pengujian Anda selesai - masalah Anda tidak ada hubungannya dengan yang ini.

Saya mengatasi masalah ini untuk tujuan debugging dengan hanya memasukkan apa pun yang saya ingin masuk ke pernyataan expect . Jadi, alih-alih console.log(sketchyVariable) , gunakan expect(sketchyVariable).toEqual(42) .

Apa yang berhasil untuk saya di Node 8:
Alih-alih menggunakan console.log , gunakan log debug bawaan:

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

Dan mulailah bercanda dengan flag debugger:

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

Saya melihat log konsol muncul secara sporadis ketika menonton satu tes. Kadang-kadang saya akan melihat semua log, kadang tidak ada, dan di lain waktu saya akan melihat beberapa dari mereka tetapi tidak semuanya. Setiap kali tes berjalan saya akan melihat sesuatu yang berbeda. 😒

--verbose=false memperbaikinya untuk saya. Saya terkejut dengan ini, karena saya tidak menyetel verbose ke true mana pun. Ternyata Jest akan menyetelnya ke true secara otomatis jika Anda menjalankan satu tes . 🙃

jika hanya ada satu file tes yang dijalankan, maka defaultnya adalah true.

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

Utas StackOverflow terkait: https://stackoverflow.com/questions/48695717/console-log-statements-output-nothing-at-all-in-jest

lelucon tidak menangani logging dengan baik di berbagai level. Itu harus

  • tangkap dan tampilkan semua log yang diambil untuk satu pengujian pada kegagalan secara default
  • memiliki opsi untuk tidak menunjukkannya sama sekali, dan
  • memiliki opsi untuk menonaktifkan pengambilan.

itu dia. tidak rumit sebenarnya.

Dugaan saya adalah, mereka menangkap log konsol karena mereka mencoba mendapatkan output asinkron untuk dicetak dalam urutan yang waras saat menjalankan tes. Masalahnya adalah jika kode logging ini tidak berfungsi untuk pengguna, di lingkungan mereka, mereka cukup banyak disemprot.

Saya berhenti menggunakan lelucon bertahun-tahun yang lalu, karena saya tidak dapat dengan andal mendapatkan keluaran konsol saat men-debug tes, apa pun saran yang saya ikuti di utas ini.

Moral dari cerita ini adalah, jangan main-main dengan konsol global. PERNAH. Jika Anda ingin menyediakan logger yang dapat dihidupkan atau dimatikan, lakukan itu. Saya akan menggunakannya jika saya mau. Tetapi konsol global tidak boleh diganggu.

Dapatkan Outlook untuk iOS https://aka.ms/o0ukef


Dari: pemberitahuan ketulusan [email protected]
Dikirim: Rabu, 12 Agustus 2020 12:33:23 PM
Kepada: facebook/jest [email protected]
Cc: Chris Grimes [email protected] ; Sebutkan [email protected]
Subjek: Re: [facebook/jest] console.log tidak ditampilkan saat menjalankan tes (#2441)

lelucon tidak menangani logging dengan baik di berbagai level. itu harus menangkap log dan menunjukkannya pada kegagalan secara default, memiliki opsi untuk tidak menampilkan sama sekali, dan memiliki opsi untuk menampilkan semua. itu dia.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub https://github.com/facebook/jest/issues/2441#issuecomment-673011577 , atau berhenti berlangganan https://github.com/notifications/unsubscribe-auth/AAFNBBK5MQEA6AJHEC52ZWDSALG6HANCNFSM4C2VWUXQ4C2VWUXQ

@halis Saya telah menggunakan dan mematikan Jest selama sekitar empat tahun dan ini selalu menjadi masalah. Hasilnya adalah tes Jest cukup sulit untuk di-debug.

Perasaan saya adalah bahwa permainan utama Jest adalah dengan senang hati mematahkan perilaku & semantik yang diharapkan sekarang dan kemudian jika itu secara drastis meningkatkan pengalaman pengujian. Hal-hal seperti autohoisting dari jest.mock(...) berarti bahwa tes Jest tidak sepenuhnya JavaScript (atau bahkan ECMAScript) dalam semantiknya; demikian juga paralelisme berarti bahwa metode bawaan pengembalian-kekosongan seperti console.log dapat dan harus diperlakukan sebagai asinkron, jika dapat meningkatkan kinerja.

Itu adalah hal yang buruk? Jelas belum tentu, karena Jest sangat sukses. Tapi saya pikir Jest memiliki kapasitas untuk mengejutkan Anda sesekali. Saya cukup yakin 90% pengguna Jest tidak tahu kode mereka diubah AST menjadi panggilan tiruan, misalnya.

Saya cukup yakin 90% pengguna Jest tidak tahu kode mereka diubah AST menjadi panggilan tiruan, misalnya.

APA

Coba gunakan console.debug atau console.error

Anda dapat menggunakan --useStderr dalam kasus saya memecahkan masalah karena mengirimkan pesan secara langsung

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

Saya telah berjuang dengan ini lagi hari ini dan flag --useStderr memperbaikinya untuk saya. Terima kasih @diomalta!

Saya berjuang dengan masalah yang sama, log tidak muncul saat tes gagal.

Saya berhasil menampilkan console.log dengan menyetel verbose: true di jest.config

Apakah halaman ini membantu?
0 / 5 - 0 peringkat