Jest: console.log tidak mengeluarkan output

Dibuat pada 19 Jun 2017  ·  137Komentar  ·  Sumber: facebook/jest

Silakan coba Jest 24 jika Anda mengalami masalah dengan console.log output yang hilang


Percabangan dari Edisi #2441

@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".
Confirmed

Komentar yang paling membantu

Dua tahun tanpa log konsol membuat saya menjadi pengembang yang lebih baik. Terima kasih tim Jest!

Semua 137 komentar

@thymikee Adakah yang tahu mengapa ini terjadi?

Tidak tahu, tetapi saya akan mencoba meminimalkan contoh, misalnya dengan menghapus TypeScript

Saya dapat melakukan repro tanpa TypeScript

Dapat mengonfirmasi Node 7.4 memakan log konsol, tetapi berfungsi pada Node 7.5.0, 7.10.0, 8.0.0 dan 8.1.2.
Harap tingkatkan versi Node Anda. Penutupan

@thymikee Bagaimana dengan Node 6, yang merupakan rilis LTS saat ini? (Sepertinya saya juga melakukan ini, meskipun belum cukup men-debug-nya. Namun, saya terbatas pada rilis LTS untuk saat ini, jadi tidak dapat memutakhirkan).

Diuji pada v6.11.0, masih menunjukkan console.log s.

Ah, mungkin saya akan mendapat masalah lain. Terima kasih, @thymikee , saya akan kembali men-debugnya sedikit lagi.

Saya menjalankan Node 7.3.0 tanpa sadar (versi yang salah melalui n) dan tidak masuk. Beralih ke 8.1.1 dan login lagi.

@thymikee - Saya tidak mengerti bagaimana solusinya? ...Saya tidak dapat memutakhirkan versi simpul saya

Saya kira saya sedikit bingung bagaimana ini akan dianggap sebagai bug Node dan setidaknya tidak ada hubungannya dengan Jest itu sendiri. Menggunakan Node v7.4.0, dengan Jest v19.0.2 saya melihat log konsol dari pengujian saya. Cukup memperbarui Jest ke v20.0.4 (tanpa membuat perubahan apa pun pada konfigurasi lain) menyebabkan log konsol tidak lagi muncul. Apakah ada sesuatu yang saya lewatkan?

@thymikee Jadi, saya telah memutakhirkan versi simpul saya dan saya tidak melihat log konsol di Node 8.2.1 Winx64 + Jest 20.0.4. Saya harus menggunakan fallback untuk saat ini

  console.log = s => {
    process.stdout.write(s + "\n");
  };

dan saya cukup yakin itu harus diperbaiki di Jest, karena versi sebelumnya tidak memiliki masalah ini.

@nowherenone dapatkah Anda menguji apakah itu terjadi pada rilis alfa terbaru jest@test ?

@thymikee Baru saja mencoba dengan jest@test pada node 8.2.1 tetapi hasil yang sama. Pernyataan console.log selalu ditelan.

@thymikee Masalahnya ada di modul BufferedConsole, di mana parameter konstruktor Konsol tidak cocok dengan yang diharapkan.

Saya telah membuka PR, mungkin itu akan membantu: https://github.com/facebook/jest/pull/4157

Saya pikir masalahnya di sini adalah bahwa Jest menyangga pesan tetapi ada sesuatu yang menyebabkan bail out (atau infinite loop dll.). Anda harus menggunakan --verbose untuk mencetak pesan langsung ke aliran keluaran.

Ini konyol - saya dipicu oleh jumlah tanggapan yang tidak berguna dari @cpojer (dalam setiap masalah dan PR saya) dan mencoba untuk menempatkan semuanya pada orang lain seperti entah bagaimana kami tidak cukup pintar.

Jangan gunakan Jest - itu jawaban saya jika Anda bertanya-tanya. Temukan kerangka pengujian baru.

describe('index', () => {
  it('doesnt print anything', () => {
    console.log('Hellllooo');
    expect(true).toBe(true);
  });
});
$ yarn test -- src/__tests__/index.spec.js --verbose
yarn test v0.27.5
warning package.json: No license field
$ jest "src/__tests__/index.spec.js" "--verbose"
 PASS  src/__tests__/index.spec.js
  Index
    ✓ doesnt print anything (2ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.969s, estimated 2s
$ jest "--version"
v20.0.4
$ node --version
v7.4.0

Saya yakin saya hanya akan disuruh menginstal versi Node Lmao yang lebih baru - lelucon yang luar biasa 😂 😂 😂

@nf071590 tidak dapat melakukan repro, bekerja pada repl.it dengan versi Jest dan Node yang sama persis: https://repl.it/KYLc/0

Harap buat repro serius sebelum mengomel tentang pengelola proyek.
Bersulang!

screen shot 2017-08-24 at 17 39 59

Tidak yakin apa yang harus dilakukan tentang ini. Saya benar-benar menempelkan contoh Anda ke dalam file, dan menjalankan Jest, dan itu berfungsi seperti yang diiklankan di Mac saya, dengan versi master Jest terbaru pada satu menit yang lalu. Melihat:

screen shot 2017-08-24 at 4 38 11 pm

Melempar karena saya di windows (node ​​8.4, lelucon 21.0.0-alpha.2), console.log s _sometimes_ disembunyikan jika Anda tidak menggunakan --verbose , tetapi tampaknya ditampilkan secara konsisten dengan itu. Senang memperbarui dengan hasil menggunakan simpul 7 dan lelucon stabil ketika saya mendapatkan waktu sebentar.

Masalah yang sama di sini.

describe('index', () => {
  it('doesnt print anything', () => {
    console.log('Hellllooo');
    expect(true).toBe(true);
  });
});
$ node --version
v7.4.0
$ jest "--version"
v21.1.0

screen shot 2017-09-21 at 14 34 32

Saat ini mengalami masalah yang sama pada node v8.7.0 (npm v5.4.2).

Ini masih masalah

Bisakah Anda memberikan reproduksi?

FWIW, saya berakhir di sini karena saya mengalami masalah yang sama persis. simpul v7.4.0. Tingkatkan versi Node saya, dan console.log mencetak seperti yang diharapkan sekarang, bahkan tanpa --verbose . V7.4.0 mungkin bukan satu-satunya versi yang memiliki masalah ini, tetapi tampaknya ini terkait dengan versi, dan bukan masalah untuk beberapa versi Node. Saya sekarang menggunakan Node v8.3.0, yang sepertinya berfungsi.

Yang mengatakan, sebelum memutakhirkan saya memiliki versi yang sama dengan @nf071590 , dan masalah yang sama. Saya tidak yakin mengapa itu tidak terjadi di repl.it, tetapi itu bukan hal aneh yang hanya terjadi di komputernya.

Saya dapat mereproduksi ini dengan node 8.9.0 dan lelucon 21.2.1, macOS 10.12.6 (16G1036)

@SimenB saya bisa tetapi sepertinya masalah ini telah dibahas sampai mati di sini dan di tempat lain. Sifat lelucon multi-(anak)proses berarti bahwa itu akan menimpa console.logs , dan tanpa penulisan ulang besar-besaran yang tidak akan berubah. Siapa pun yang datang ke utas ini dan ingin menghindari masalah saat menggunakan flag --verbose melarang debugging dengan console.log , harus menggunakan flag --watch . Ini akan menghindari proses penimpaan pekerja anak dan memungkinkan Anda melihat keluaran verbose dengan log konsol. --watch sangat cepat dan menambah nilai lebih dengan memusatkan perhatian pada tes dan kode yang telah berubah, dengan hanya menjalankan tes yang diubah saat disimpan.

Dalam kasus saya, saya menemukan pesan verbose akan memakan beberapa tetapi tidak semua pesan console.log . Saya menghapus opsi verbose dan sepertinya berhasil!

Saya baru saja memutakhirkan versi simpul saya dari v6 ke v9 dan salah satu file pengujian saya menghibur.

Saya telah berjuang dengan masalah ini selama berminggu-minggu. Saya senang itu berhasil sekarang

Masalahnya masih berlanjut dengan --verbose ketika digabungkan dengan --forceExit - Saya pikir alasannya adalah console.log menghasilkan stdout sementara lelucon menulis ke stderr dan ketika --forceExit mungkin masih ada konten di stdout tidak di-flush

Saya menemukan solusi berikut (tanpa perlu --verbose ) untuk memperbaiki console.log tidak ditampilkan dan/atau console.log disangga dan tidak ditampilkan secara langsung

memerintah
jest .... --forceExit --setupTestFrameworkScriptFile ./src/tests/jestShim.js

isi jestShim.js

const { Console } = require('console');
global.console = new Console(process.stderr, process.stderr);

Masalah yang sama-tidak pernah melihat keluaran console.log.

Node 9.80 Jest 22.4.2 Mac OS 10.13.3

Tidak ada satu pun solusi yang disarankan di sini yang berhasil untuk saya.

Seperti biasa, harap buat reproduksi yang dapat kami tarik untuk diuji. Saya belum menemukan masalah ini, jadi saya tidak yakin bagaimana mulai memperbaikinya

Solusi dari @ledbit berhasil untuk saya
NPM 5.3.0
lelucon 22.4.3

  • Mac OS

Saya masih pada titik membutuhkan reproduksi.

--forceExit sepertinya agak rusak, tapi saya tidak menemukannya saat tidak menggunakan flag itu

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

Saya akhirnya mendapatkan log untuk muncul dengan menandai masing-masing 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 ).

Ini masih menjadi masalah. Saya menggunakan jest v22.4.3 pada Node 10.1.0 dan saya hanya melihat pernyataan console.log pertama dari aplikasi saya, sisanya diabaikan. Ketika saya mengatur perpustakaan logging saya untuk streaming ke stdout, saya dapat melihat beberapa log tetapi tidak muncul dalam urutan yang benar.

Pekerjaan Jest sebagai test runner adalah membantu kami men-debug dan memperbaiki kode kami. Itu tidak bisa dicapai tanpa log.

@thymikee tolong buka kembali masalah ini

@thanpolas merasa bebas untuk membuat masalah baru dengan repositori yang menunjukkan bug sehingga kami dapat menyelidiki :). Juga, silakan gunakan Jest 23, karena itu yang terbaru.

Saya menemukan masalah saya, logging terjadi melalui logger yang streaming ke stdout, ketika diarahkan ke console.log saya lupa untuk memanggil panggilan balik penulis aliran sehingga aliran berhenti mengirim log.

Untuk apa nilainya, saya telah melihat perbedaan antara Terminal dan iTerm2.

Saya pikir opsi untuk menginstruksikan lelucon untuk tidak melakukan sihir di stdout dan konsol akan sangat bermanfaat bagi semua orang

Berikut adalah salah satu contoh bug yang berhasil saya reproduksi. Tidak yakin apakah ada banyak sumber:

https://github.com/spion/jest-logging-repro

yarn install; yarn repro

Penyiapan: Jest berada dalam mode tontonan, dengan bendera verbose diaktifkan, dengan setidaknya dua file uji berjalan.

Teori: Output dari salah satu pekerja memindahkan kursor konsol ke tempat yang salah menimpa konten yang salah.

Pengamatan di konsol:

 RUNS  tests2/other-tests.js
 RUNS  lib/example.spec.js
 PASS  tests2/other-tests.js
  bar
    ✓ always is true (17ms)

 PASS  lib/example.spec.js
  foo
    ✓ adds 5 (5ms)

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

Watch Usage: Press w to show more.

Jika saya menghapus log konsol, secara visual "MENJALANKAN" ditimpa sebagaimana dimaksud:

 PASS  lib/example.spec.js
  foo
    ✓ adds 5 (5ms)

 PASS  tests2/other-tests.js
  bar
    ✓ always is true (5ms)

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

Watch Usage: Press w to show more.

Jika saya menambahkan 3 log konsol:

 PASS  lib/example.spec.js
  foo
    ✓ adds 5 (5ms)


 RUNS  tests2/other-tests.js

Test Suites: 1 passed, 1 of 2 total
Tests:       1 passed, 1 total
Snapshots:   0 total
  console.log tests2/other-tests.js:5
    JEST

 PASS  tests2/other-tests.jsests.js:6
  bar
    ✓ always is true (19ms)

Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 totalTime:        1.788sRan all test suites.

Watch Usage: Press w to show more.

Versi simpul:

30656 % node --version
v8.11.2

Saya pikir @spion sedang mengasahnya. Repro mudah yang bagus.

Dapat mengkonfirmasi bahwa ini terjadi pada Node v8.11.1 LTS dan hanya terjadi pada mode watch dan watchAll . tanpa mode jam tangan, tidak masalah.

Saya memiliki masalah yang sama dengan Node v10.6.0 dan Jest 23.4.1

Ya saya juga. Baru saja ditemukan bahwa -w 1 membuat logging berfungsi kembali, yang sesuai dengan hipotesis @spion .

simpul 8.11.3
lelucon 23.4.0

Saya menemukan masalah ini, atau setidaknya masalah serupa, ketika saya mengaktifkan pencocokan regex file (menekan p dalam mode watch ). Dengan mengaktifkan all , log akan dicetak seperti yang diharapkan. Catatan --verbose tidak ada di sini.

Contoh 1

it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
    const fV = shallow(<FormValidator/>);
    console.log('r1');
    console.error('r2');
    console.error('r3');
    ...

Dengan menonton all (mencetak log s dan error s:

 PASS  src/components/__tests__/FormValidator.js
  ● Console

    console.log src/components/__tests__/FormValidator.js:56
      r1
    console.error src/components/__tests__/FormValidator.js:57
      r2
    console.error src/components/__tests__/FormValidator.js:58
      r3

Dalam mode file regex (hanya mencetak log pertama dan bukan error s):

Test Suites: 0 of 1 total
Tests:       0 total
Snapshots:   0 total
  console.log src/components/__tests__/FormValidator.js:56
    r1

 PASS  src/components/__tests__/FormValidator.jsidator.js:57
  FormValidator
    ○ skipped 3 tests
  FormValidator.displayMessage
    ✓ should display a ErrorMessage component if state.validated is 'error' (32ms)
    ○ skipped 5 tests
  FormValidator.render
    ○ skipped 1 test

Contoh 2

it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
    const fV = shallow(<FormValidator/>);
    console.log('r1');
    console.error('r3');
    ...

all (mencetak log dan error seperti yang diharapkan):

 PASS  src/components/__tests__/FormValidator.js
  ● Console

    console.log src/components/__tests__/FormValidator.js:56
      r1
    console.error src/components/__tests__/FormValidator.js:59
      r3

watch (tidak ada yang dicetak dengan kode di atas):

Snapshots:   0 total
 PASS  src/components/__tests__/FormValidator.jsator.js:56
  FormValidator
    ○ skipped 3 tests
  FormValidator.displayMessage
    ✓ should display a ErrorMessage component if state.validated is 'error' (20ms)
    ○ skipped 5 tests
  FormValidator.render
    ○ skipped 1 test

Test Suites: 1 passed, 1 total

Contoh 3

it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
    const fV = shallow(<FormValidator/>);
    console.log('r1');
    console.log('r2');
    console.log('r3');
    console.log('r4');
    ...

all (mencetak keempat log yang diharapkan):

 PASS  src/components/__tests__/FormValidator.js
  ● Console

    console.log src/components/__tests__/FormValidator.js:56
      r1
    console.log src/components/__tests__/FormValidator.js:57
      r2
    console.log src/components/__tests__/FormValidator.js:58
      r3
    console.log src/components/__tests__/FormValidator.js:59
      r4

watch (hanya dua log pertama yang dicetak dengan kode di atas):

Snapshots:   0 total
  console.log src/components/__tests__/FormValidator.js:56
    r1

  console.log src/components/__tests__/FormValidator.js:57
    r2

 PASS  src/components/__tests__/FormValidator.jsator.js:58
  FormValidator
    ○ skipped 3 tests
  FormValidator.displayMessage
    ✓ should display a ErrorMessage component if state.validated is 'error' (31ms)
    ○ skipped 5 tests
  FormValidator.render
    ○ skipped 1 test

Test Suites: 1 passed, 1 total

Saya tidak yakin apa yang saya lakukan tetapi saya pikir urutan bagaimana Anda mengatur lelucon itu penting. Saya pikir beberapa konfigurasi mungkin saling menimpa. Saya mendapatkan hasil tes dan log.

node -v v8.11.2
jest -v 23.4.0

Di bawah ini adalah konfigurasi lelucon saya di package.json saya

```
"bercanda": {
"transformIgnorePatterns": [
"/node_modules/"
],
"setupFiles": [
"/src/setupTests.js"
],
"testEnvironment": "jsdom",
"verbose": benar,
"proyek": [
{
"displayName": " KOMPONEN ",
"setupFiles": [
"/src/setupTests.js"
],
"modulePaths": ["/src/"],
"testMatch": ["/src/components/__tests__/ / .test.js"]},{"displayName": " REDUCERS ","setupFiles": ["/src/setupTests.js"],"modulePaths": ["/src/"],"testMatch": ["/src/reducers/__tests__/ /.test.js"]
},
{
"displayName": " TINDAKAN ",
"setupFiles": [
"/src/setupTests.js"
],
"modulePaths": ["/src/"],
"testMatch": ["/src/actions/__tests__/ */ .test.js"]
}
]
},

Here are my dependencies

"ketergantungan": {
"babel-core": "^6.26.3",
"babel-jest": "^23.4.0",
"babel-loader": "^7.1.5",
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
"dotenv": "^6.0.0",
"ekspres": "^4.16.3",
"bercanda": "^23.4.0",
"bereaksi": "^16.4.1",
"react-dom": "^16.4.1",
"react-redux": "^5.0.7",
"react-scripts": "1.1.4",
"redux": "^4.0.0",
"regenerator-runtime": "^0.12.0"
},

output from just running jest

PEREDAM LULUS src/reducers/__tests__/comments/index.test.js
menangani tindakan tipe SAVE_COMMENT (4ms)
menangani tindakan dengan tipe yang tidak diketahui

LULUS TINDAKAN src/actions/__tests__/index.test.js
simpanKomentar
memiliki tipe yang benar (1ms)
memiliki muatan yang benar (1ms)

LULUS KOMPONEN src/components/__tests__/App/index.test.js
Harus menampilkan Daftar Komentar (5ms)
Harus menampilkan Kotak Komentar (1ms)

LULUS KOMPONEN src/components/__tests__/CommentBox/index.test.js
memiliki area teks (23ms)
memiliki tombol (3ms)
area teks
memiliki area teks yang dapat diketik pengguna (9ms)
ketika formulir dikirimkan, area teks dikosongkan (5ms)

LULUS KOMPONEN src/components/__tests__/CommentList/index.test.js
membuat satu LI per komentar (32ms)

Test Suites: 5 lulus, total 5
Tes: 11 lulus, total 11
Snapshot: 0 total
Waktu: 3.79 detik
Jalankan semua rangkaian pengujian dalam 3 proyek.
console.log src/components/__tests__/CommentList/index.test.js:26
0

console.log src/components/__tests__/CommentList/index.test.js:27
Uji

```

Masalah ini harus dibuka kembali, keluaran konsol ditelan oleh lelucon juga, lingkungan saya adalah:

→ simpul --versi
v8.11.3

→ npx lelucon --version
23.4.1

Saya mencoba dengan pengaturan yang bersih dan semuanya berfungsi dengan baik.

// console.test.js
describe('jest should console output', () => {
  test('should console.log output be print', () => {
    console.log('console.log')
    expect(1).toBe(1)
  })

  test('should console.error output be print', () => {
    console.error('console.error')
    expect(1).toBe(1)
  })

  test('should console.info output be print', () => {
    console.info('console.info')
    expect(1).toBe(1)
  })
})

keluaran:

image

Jadi saya pikir masalahnya mungkin terkait dengan konfigurasi lelucon saya:

{
  "globals": {
    "API_SERVER_PLACEHOLDER": "SOME_API_ADDRESS"
  },
  "moduleFileExtensions": [
    "js",
    "jsx"
  ],
  "transform": {
    "^.+\\.jsx?$": "babel-jest"
  },
  "moduleNameMapper": {
    "\\.(css|less|sass|scss|png)$": "<rootDir>/__mocks__/styleMock.js",
    "\\.(gif|ttf|eot|svg|png)$": "<rootDir>/__mocks__/fileMock.js"
  }
}

Naluri saya mengatakan kepada saya untuk memeriksa verbose dan setelah menghapusnya semuanya baik-baik saja.

rekap

jest versi 23.4.1 dengan konfigurasi verbose disetel ke true akan menyebabkan keluaran konsol tertelan.

usulkan untuk mengubah aliran keluaran default menjadi stdout : https://github.com/noscripter/jest/pull/1

Rusak lagi?! Kenapa ini terus putus?

Saya telah mengatasi ini dengan:

expect(str).toBe("not this");

😬.

Jika Anda memiliki verbose: true di package.json Anda, atau Anda bercanda dengan flag --verbose (atau keduanya?), coba hapus keduanya.

Nevermind itu tidak membantu lagi.

Saya sering dapat melihat output log selama sepersekian detik _sebelum_ ringkasan pengujian lengkap dicetak ke konsol. Saya harus console.log sekitar 4-5 kali berturut-turut untuk menampilkan output, dan bahkan kemudian log terakhir akan dipotong setengah (misalnya saat mencetak objek besar, hanya paruh pertama yang akan terlihat di log yang dicetak terakhir).

Ini juga sangat sulit untuk diprediksi. Kadang-kadang satu atau dua console.log s akan cukup, sedangkan di lain waktu saya harus menempatkan tiga sampai lima berturut-turut. Juga tidak masalah jika log saya ada dalam kode yang saya uji, atau dalam kasus uji itu sendiri.

Sepertinya lelucon sedang mencetak log, lalu menghapus output sebelum mencetak ringkasan pengujian lengkap, padahal seharusnya menyimpan log itu.

Saya telah menerima pada titik ini bahwa saya harus menyalin-tempel log beberapa kali untuk melihatnya di konsol.

console.log tidak berfungsi jika Anda menjalankan file pengujian tertentu saja

yarn test <your-test-file-name>

misalnya
yarn test FormValidator

FYI saya menjalankan repro saya dengan perintah berikut:

script -qfc 'yarn repro' /dev/null > raw.log

Thats zsh - Anda mungkin ingin script -qfce di bash

dan kemudian saya melihat log dengan cat -vet raw.log . Berikut adalah hasilnya:

^[[2K^[[1G^[[1myarn run v1.7.0^[[22m^M$
^[[2K^[[1G^[[2m$ jest --watch^[[22m^M$
^[[2J^[[3J^[[H^[[1m^[[2mDetermining test suites to run...^[[1m^[[22m^[[999D^[[K^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[0m^[[7m^[[1m^[[32m PASS ^[[39m^[[22m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A  foo^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A    ^[[32mM-bM-^\M-^S^[[39m ^[[2madds 5 (4ms)^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^[[999D^[[K  ^[[2mconsole.log^[[22m ^[[2mtests2/other-tests.js:5^[[22m^M$
    JEST^M$
^M$
^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[0m^[[7m^[[1m^[[32m PASS ^[[39m^[[22m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A  bar^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A    ^[[32mM-bM-^\M-^S^[[39m ^[[2malways is true (15ms)^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[999D^[[K^[[1mTest Suites: ^[[22m^[[1m^[[32m2 passed^[[39m^[[22m, 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m2 passed^[[39m^[[22m, 2 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1.128s^M$
^[[2mRan all test suites^[[22m^[[2m related to changed files^[[22m^[[2m.^[[22m^M$
^M$
^[[1mWatch Usage^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22ma^[[2m to run all tests.^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22mf^[[2m to run only failed tests.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m p ^[[2mto filter by a filename regex pattern.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m t ^[[2mto filter by a test name regex pattern.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m q ^[[2mto quit watch mode.^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22mEnter^[[2m to trigger a test run.^[[22m^M$

Semoga ini membantu. Sepertinya ada salah hitung kode kontrol di titik tertentu.

Hasil akhirnya terlihat seperti ini:

 PASS  lib/example.spec.js
  foo
    ✓ adds 5 (4ms)


 RUNS  tests2/other-tests.js

 PASS  tests2/other-tests.js2 total
  bar
    ✓ always is true (15ms)

Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        1.128s
Ran all test suites related to changed files.

Watch Usage
 › Press a to run all tests.
 › Press f to run only failed tests.
 › Press p to filter by a filename regex pattern.
 › Press t to filter by a test name regex pattern.
 › Press q to quit watch mode.
 › Press Enter to trigger a test run.

Baris konsol hilang, dan pass ditulis dua baris terlalu jauh ke bawah, kemungkinan karena jalinan dengan console.log tidak diperhitungkan saat naik untuk menampilkan "LULUS"

edit: Menambahkan ringkasan ini dalam inti untuk pencarian dan manipulasi yang mudah: https://Gist.github.com/spion/bbb34c5abc1230a37ad5f4f01336b8df

ps Untuk mereproduksi ini dengan master saat ini, mungkin perlu beberapa paksaan. Saat Anda memasuki mode tontonan, tekan dan tahan "a" untuk beberapa saat - console.logs akan mulai lepas kendali di beberapa titik (muncul di tempat dan waktu yang tidak terduga)

Saya juga lupa - saya menggunakan ubuntu bionic, jika itu membuat perbedaan perilaku terminal WRT:

% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:    18.04
Codename:   bionic

Gerakan mengungkap kekerasan seksual demi menghapuskannya. @spion telah memahami apa yang saya lihat. Saya hanya menemukannya karena saya memiliki tes pada kode async yang lambat. Saya melihat keluaran konsol, lalu ditimpa oleh ringkasan hasil pengujian.

Untuk apa nilainya, saya telah kembali ke [email protected] dan melakukannya menyelesaikan masalah yang saya alami dengan output ringkasan pengujian yang ditulis di atas output konsol di [email protected] .

Pembaruan - Saya yakin saya telah menemukan tambalan minimal yang membuat beberapa kemajuan, tetapi saya butuh beberapa saat untuk memahami interaksi antara reporter Jest dan generator Status

Jest monkey-patch proses stderr dan metode penulisan stream stdout dengan penulisnya sendiri. Penulis itu menuliskan output dari jest-cli Status.js, yang berisi hal-hal seperti jumlah tes yang sedang berlangsung, bilah kemajuan, waktu yang telah berlalu, dan sebagainya.

Setiap kali ada instruksi tulis pada aliran itu, instruksi itu diganti dengan instruksi "hapus" untuk status (naik menggunakan kode kontrol ANSI), penulisan asli, dan instruksi "tulis status lagi". Jadi ilusi bahwa statusnya selalu di bagian bawah layar, sedangkan teks bergulir di atasnya.

(Tentu saja, ini sedikit lebih pintar dari itu - penulisan di-buffer dan data yang di-buffer hanya benar-benar ditulis sekali setiap 100 ms bersama dengan statusnya)

Namun, pelari uji paralel (digunakan dalam mode arloji, yang menyetel runInBand ke false) menjalankan pekerja lain. Pekerja tersebut diatur untuk "mewarisi" aliran stdio dari proses asli. Sayangnya, itu tidak berarti mereka mewarisi versi tambalan yang memperbarui status! Jika tulisan-tulisan itu terjadi, mereka akan menjadi

  1. ditambahkan setelah status (status tidak terhapus)
  2. akan terhapus pada penghapusan status berikutnya (membuat status sebelumnya juga terlihat sebagian, karena penghapusan tidak naik cukup untuk menghapus keluaran konsol dan pembaruan status lama)

Untuk memastikan versi yang ditambal menerima penulisan tty itu, perlu untuk mengalihkan aliran proses anak dari mode "mewarisi" ke mode "pipa". Dengan cara ini output proses tersedia sebagai aliran dalam proses anak alih-alih langsung pergi ke stdout/stderr utama. Kami juga perlu menyalurkan aliran secara manual:

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

Pemipaan aliran secara manual memastikan bahwa penulisan yang ditambal monyet dipanggil oleh node.

Ini merusak banyak tes integrasi, namun sebagian besar rusak karena warna yang hilang. Sedang mengerjakan

diff --git a/packages/jest-worker/src/worker.js b/packages/jest-worker/src/worker.js
index 5eee64af..5e5126eb 100644
--- a/packages/jest-worker/src/worker.js
+++ b/packages/jest-worker/src/worker.js
@@ -94,6 +94,8 @@ export default class {
         {
           cwd: process.cwd(),
           env: Object.assign({}, process.env, {
+            // $FlowFixMe: Does not know about isTTY
+            FORCE_COLOR: process.stdout.isTTY,
             JEST_WORKER_ID: this._options.workerId,
           }),
           // Suppress --debug / --inspect flags while preserving others (like --harmony).

menurunkan angka itu secara signifikan tetapi masih cukup tinggi:

Test Suites: 51 failed, 232 passed, 283 total
Tests:       149 failed, 7 skipped, 2706 passed, 2862 total
Snapshots:   19 failed, 17 obsolete, 996 passed, 1015 total

Saya tidak berpikir ada cara untuk mengatasi ini - hasilnya berubah secara drastis, karena lebih banyak tulisan yang akhirnya menambahkan pembaruan status sekarang.

edit: ada juga masalah node yang membilas aliran keluaran terlambat dalam situasi tertentu, lama setelah proses anak mengirim pesan sukses ke induk.

tolong perbaiki, ini sangat mengganggu produktivitas dengan lelucon

Menurunkan versi ke [email protected] membawa kembali keluaran log konsol. Harus mengatur --env node untuk membuatnya berfungsi. Tolong perbaiki ini.

Saat ini sepertinya satu-satunya cara saya bisa membuat logging konsol dapat diandalkan adalah dengan mencatat hal yang sama 3-4 kali berturut-turut. Jest hanya akan memblokir sejumlah tertentu dari mereka. Masih sangat mengganggu.

Apakah ada pembaruan tentang ini? Saya menjalankan lelucon 23.4.1 dan node 9.11.1 dan terkadang saya mendapatkan output log konsol dan terkadang tidak.

Dua tahun tanpa log konsol membuat saya menjadi pengembang yang lebih baik. Terima kasih tim Jest!

Saya tidak percaya ini masih menjadi masalah. Mengapa masalah ini ditutup?

Maksud saya, siapa yang mau men-debug tes mereka yang gagal, bukan?

Seperti yang disebutkan @jonogilmour jika saya mencatat sesuatu setelah itu tidak ditampilkan tetapi mencatat sesuatu dua kali, saya akan menampilkan salah satunya.

FWIW, solusi --verbose=false bekerja untuk saya. Di package.json saya :

"scripts": {
...
    "test": "react-scripts test --env=jsdom --verbose=false",

Beberapa pengamatan lain:

  • Menghapus --env=jsdom (bukan opsi untuk aplikasi saya yang sebenarnya) membuatnya berfungsi tanpa --verbose=false.
  • Menjalankan tes secara langsung dengan lelucon (bukan melalui skrip reaksi) juga membuatnya berfungsi.
  • Ketika pernyataan gagal dan Anda mendapatkan lebih banyak keluaran dari lelucon, lebih banyak log konsol Anda yang ditimpa juga.

Halo cowok/cewek,
Saya juga menemui masalah log konsol lelucon yang terkenal saat menjalankan pengujian dalam mode --watch.
Solusinya adalah menggunakan --watchAll alih-alih --watch. Ringkasan tes menjadi lebih buruk, tetapi log menunjukkan seperti yang diharapkan.

macOS High Sierra
simpul v8.11.3
lelucon: 23.6.0
ts-bercanda: 23.10.4

Bagi saya ini di beforeAll

  console.log = s => {
    process.stdout.write(s + "\n");
  };

dan ini di Shell berhasil:

yarn test > test.log

Bagi saya, beralih ke mocha memecahkan masalah. Sangat sepele untuk beralih, karena DSL sangat mirip. Anda bahkan dapat terus menggunakan perpustakaan ekspektasi JEST: https://www.npmjs.com/package/expect

Ini hampir semudah menghapus jest dan menginstal mocha .

Sunting: Spam atau tidak, ini adalah solusi termudah di sini.

Masalah ini benar-benar menyakitkan, saya berharap pengelola dapat memperbaikinya sesegera mungkin, karena Jest dimaksudkan untuk meningkatkan produktivitas, bukan sebaliknya kan?

Bagaimanapun, berikut ini adalah apa yang saya gunakan tulis sekarang:

export const log = (s: any) => {
    console.log(s);
    console.log(s);
    console.log(s);
    process.stdout.write(s + "\n");
};

Anda harus spam jalan keluar.

Mengonfirmasi bahwa --verbose=false memperbaiki masalah.

--verbose=false tidak bekerja untuk saya dengan versi 23.6.0

OMG ini menyakitkan :/ november 2018

Tolong buka kembali masalah ini

coba setel silent: false di jest.config.js ... dalam kasus saya ini membantu saya

Tidak ada solusi yang berhasil.
NodeJS: v8.12.0
Lelucon: v23.4.1

Saya telah menggunakan Jest selama berbulan-bulan dan itu bagus dan sementara bug ini _sangat mengganggu_ , solusi yang selalu saya gunakan adalah membuat pernyataan sampah karena itu akan masuk ke konsol setiap saat.

Contoh, saat mencoba keluar dari panggilan tiruan:

expect('hello').toEqual(childFunc.mock.calls[0]) mencetak:

screen shot 2018-11-27 at 10 26 44 am

Ini tidak ideal tetapi menyelesaikan pekerjaan dan memungkinkan saya untuk menyelesaikan menulis tes saya.

Menjalankan Jest dengan bendera --watch.
Versi lelucon 23.5.0
Node versi 8.11.3

Ini adalah contoh yang baik dari "terlalu banyak keajaiban" yang terjadi di balik kap mesin, dan konsekuensinya ketika terjadi kesalahan. Saya tidak yakin mengelompokkan keluaran console.log bernilai satu setengah tahun dari pernyataan console.log yang hilang. 😕.

Setuju dengan hal di atas -- ini bukan penghalang, tapi itu membuat Jest menyakitkan dengan cara yang sama sekali tidak perlu.

"Solusi" saya adalah sebagian besar logika menggunakan log4js , jadi untuk tempat saya membengkokkan Jest ke kode sisi server, saya baik-baik saja. Sayangnya saya memiliki sejumlah besar kode sisi klien di mana saya biasanya menyalin dan menempelkan empat salinan dari masing-masing console.log karena akhirnya salah satunya muncul.

Menggunakan expect untuk mencatat info adalah solusi yang baik jika Anda masuk dari dalam pengujian (terutama karena Anda dapat membuat cuplikan untuk itu dengan kata kunci seperti logjest di editor Anda), tetapi itu gagal setiap kali Anda perlu menggali lebih dalam dan masuk dari dalam fungsi sebenarnya yang dipanggil oleh tes Anda.

Bagaimana dengan CI=true yarn run test ?

Maaf untuk apa yang saya katakan sebelumnya, tetapi ini berfungsi dengan baik tanpa judul kasus uji, maksud saya, tanpa opsi "--verbose", saya pikir --verbose melakukan semacam pemformatan dan menggantikan aliran stdout.
Jadi, bagi saya, saya sudah seperti 2 bulan dan semuanya bekerja dengan baik.
Dan jika ada yang ingin menggunakan opsi itu, tambahkan saja ke perintah npm Anda seperti: npm run test:integration -- --watchAll --verbose --coverage --etc

Bisakah orang dengan masalah menguji [email protected] ? Ini termasuk #6871

@ jamesta696 Hai, saya pikir Anda perlu memposting pertanyaan semacam itu di StackOverflow menggunakan tag "bercanda" di sini karena diskusi di sini adalah untuk "masalah", namun, saya tahu seseorang dapat membantu Anda, tetapi masalah di sini bisa ditutup karena masalah utama tidak dibahas.
Dan untuk saat ini, saya tidak dapat memberikan jawaban untuk pertanyaan itu karena saya tidak mengembangkan sesuatu untuk reaksi dan frontend, juga, saya bukan anggota lelucon, tetapi mari kita coba mengikuti aturan.

@SimenB Saya telah memperbarui lelucon (ke versi yang Anda sebutkan) & mencoba menempatkan beberapa pernyataan console.log dalam proyek saya yang memiliki masalah. Sejauh ini, tampaknya sudah diperbaiki: Semua console.log s muncul. Saya akan terus menggunakannya dan memberi tahu Anda jika saya mengalami masalah lagi.

FYI: Saya (dan masih) menggunakan jest --watchAll

@tobyhinloopen Keren untuk melihat bukti kemajuan yang disebutkan @SimenB .

itu luar biasa @tobyhinloopen!

Saya juga dapat mengonfirmasi bahwa [email protected] berfungsi dengan baik dan Anda dapat melihat semua log konsol tanpa --verbose=false.

Saya juga dapat mengonfirmasi bahwa [email protected] berfungsi dengan baik dan Anda dapat melihat semua log konsol tanpa --verbose=false.

+1. juga dapat mengkonfirmasi. senang melihat ini berhasil. kerja bagus, orang-orang Jest! 😄.

Saya dapat mengkonfirmasi juga! Ini seperti Natal. 🎅.

😃.

tidak perlu menunggu sampai pembaruan buat-reaksi-aplikasi

Saya menjalankan versi lelucon 24.0.0 , namun saya masih tidak dapat melihat console.log atau console.error . Bertanya-tanya apa yang mungkin saya lakukan salah.

Pastikan mereka tidak diejek

Ini benar-benar aneh. Tampaknya ada masalah dengan penanganan async. Saya tidak bisa menampilkan kesalahan. Bahkan jika dibungkus dengan blok try/catch , saya tidak dapat melihat kesalahannya.

Parameter generator benar pasti, Jika saya menghapus panggilan fungsi async, maka log dengan benar. Itu juga mengembalikan string yang benar ketika berada di luar for loop.

image

Versi lelucon adalah 24.0.0 , simpulnya adalah 10.5

@tiborsaas Tes Anda mungkin akan selesai sebelum console.log berjalan.
Jika Anda ingin menunggu iterasi lebih dari changedGenerators , Anda memerlukan sesuatu seperti

await Promise.all(changedGenerators.map(async (generator) => {/* ... */}))

Terima kasih atas jawabannya, tetapi sebenarnya tidak demikian, beberapa kesalahan mencegah console.log ditampilkan. Ada fungsi async lain yang berfungsi baik dengan console.log jika saya memanggilnya di forEach callback.

Sunting: sebenarnya dengan debugging baris demi baris, saya tahu masalahnya ada pada

const archives = await fs.readdir(archiveDir);

Namun masalah lelucon ini adalah tentang mencatat sesuatu. Saya tidak ingin menggagalkan pembicaraan.

Anda mungkin masih mengalami bug, hanya ingin menunjukkan (tanpa mengetahui kode persis Anda) bahwa pada umumnya adalah ide yang buruk untuk membayar banyak janji seperti ini tanpa menunggu mereka, karena mereka mungkin menolak setelah pengujian Anda selesai : )

Saya setuju, tetapi saya ingin menjalankan panggilan expect di forEach karena saya tidak tahu di muka berapa banyak perubahan yang harus saya tangani.

Sayangnya pendekatan Promise.all tidak memperbaiki apa pun.

Apakah Anda menggunakan map bukannya forEach ? Intinya adalah mengembalikan serangkaian janji ke Promise.all

@SimenB ya, saya tahu.

image

Jika ada kesalahan, saya tidak bisa melihatnya.

@tiborsaas Anda tidak menunggu Promise.all selesai: gunakan await Promise.all(...)

Melakukan itu juga, hasil yang sama. :(

bagaimana jika Anda menambahkan await new Promise((resolve) => setTimeout(resolve, 1000)) di bawah promise.all Anda?

Bisakah Anda membuka masalah baru dengan reproduksi? Saya yakin masalah yang dilaporkan oleh OP telah diperbaiki saat Anda melihat yang berbeda (tidak peduli apakah Anda menangani async dengan benar atau tidak, Anda masih harus melihat pernyataan log)

Ya memang aneh, sesuatu seperti

test('stuff', () => {
    setTimeout(() => console.log('hi', 500));
})

biasanya masih dicetak dalam beberapa cara

Dia menggunakan fungsi panggilan balik sebagai argumen ke-2 dari Promise.all([...], callback) . Dia harus menggunakan Promise.all([...]).then(callback) . Mungkin itu menyelesaikan masalahnya, saya pikir argumen ke-2 dari .all diabaikan dan tidak pernah dieksekusi (jadi log Anda tidak akan pernah dieksekusi). @tiborsaas

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

Ya itu salah, tetapi pernyataan log harus tetap muncul

@SimenB Tidak, argumen ke-2 diabaikan.

> Promise.all([Promise.resolve(true)], () => console.log("hi")).then(console.log, console.error);
Promise {
  <pending>,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function: debugDomainError] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }
// output:
// [ true ]



Ya, bingung dengan itu, maaf. Terima kasih @tobyhinloopen

const lol = await Promise.all(versions); bekerja seperti yang diharapkan.

Dalam hal ini, pernyataan log mungkin hilang karena fungsi tidak pernah dipanggil, tetapi Anda masih harus melihat pernyataan log dalam kasus forEach asli karena node akan menunggu janji selesai sebelum keluar dari proses. Jadi itu masih bug, meskipun itu kesalahan pengguna

PR: #7731

Saya menggunakan https://www.npmjs.com/package/debug untuk melakukan logging. Apakah itu akan berhasil dengan Jest?

Tidak, tidak sampai kita melakukan #6524.

Saya akan merekomendasikan mengejek debug dalam pengujian Anda dan menggunakan console.log jika Anda ingin melihatnya

Sebagai referensi, pesan konsol dapat hilang jika dicetak setelah pengujian selesai, lihat komentar di bagian bawah #7731. Ini mungkin alasan untuk beberapa, tetapi mungkin tidak semua pesan konsol yang hilang dilaporkan di sini.

--verbose bekerja untuk saya. Sebelum menggunakan --verbose, beberapa, tetapi tidak semua pesan hilang. Saya menggunakan simpul v10.15.3 dan lelucon v21.2.1

Masih menjadi masalah bagi saya, log konsol tidak muncul di Jest

meskipun pengumuman terbaru di blog bahwa masalah akhirnya terpecahkan, masalahnya masih ada, log konsol saya terkadang tidak muncul lagi, saya menggunakan jest v24.8.0 .

Dan pekerjaan saya baik-baik saja ️. Silakan kirim reproduksi yang dapat kami selidiki. Kami bukan penyihir, kami tidak dapat melihat kode Anda yang gagal mencatat keluaran.

sebenarnya, setelah diselidiki, log yang terkait dengan pengujian API (seperti supertest) tidak berfungsi. mengharapkan :/

@thymikee Ini terjadi secara tidak konsisten sehingga sangat sulit untuk mereproduksinya. contoh:
berikut berjalan dengan memilih file tunggal dari tes ( opsi p )

  • console.log('pantz') (berfungsi)
  • ubah console.log(myObject) (tidak berfungsi)
  • ubah agar sesuai (tidak berfungsi)
  • ubah ke console.log('pantz') (tidak berfungsi)
  • ubah sesuai dengan itu (tidak berfungsi)
  • restart lelucon (tidak berfungsi)
  • ubah agar sesuai (bekerja)

Sekarang saya mencoba meniru langkah yang sama dan hasilnya tidak konsisten.

Berikan contoh repo yang tidak berfungsi sehingga orang-orang JEST dapat membantu men-debug ini. @kresli

Ada banyak kemungkinan kesalahan pengguna juga, sebagian besar hilang await atau sebaliknya async console.log 's.

Saya akan mencoba mencari waktu untuk mereproduksi ini. Sampai saat itu saya menemukan log saya dimakan oleh hasil seperti yang Anda lihat di bawah. Sebelum FAIL muncul, Anda dapat melihat 2 log saya di sana. Dan juga nilainya hanya 2 log yang dihapus. Jika saya menambahkan 10 log di bawah satu sama lain, 8 akan ditampilkan. Saya pikir itu awal yang baik :)

ezgif com-gif-maker

Sementara itu, jika Anda memerlukan perbaikan catch-all yang berfungsi, Anda dapat menggunakan sesuatu seperti winston untuk masuk ke file dan konsol. Meskipun pesan konsol Anda tidak ditampilkan, pesan tersebut ditulis ke file.

Dengan winston Anda dapat mengonfigurasi apa yang Anda inginkan untuk dicatat di mana dan mendukung banyak transportasi, dan transportasi yang dapat Anda implementasikan sendiri.

const logger = winston.createLogger({
  level: "verbose",
  format: winston.format.json(),
  defaultMeta: {},
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: "combined.log" }),
  ],
});

logger.error(stuff)

Mungkin Anda bahkan dapat melakukan sesuatu yang kotor seperti mengganti console.* secara global ke logger winston.

@kresli versi berapa leluconmu? Itu terlihat seperti perilaku v23

Ini terus terjadi pada saya dengan jest v^24.6.0 dan node v10.14.2 . Tahu kenapa?

@yaelz Ini adalah masalah keras yang biasanya disebabkan oleh kesalahan pengguna tetapi juga memiliki riwayat bug yang sulit direproduksi.

Saya pikir itu akan sangat membantu kontributor untuk memberikan kasus yang dapat direproduksi dengan memberikan contoh repo atau menyediakan cara lain untuk mereproduksi masalah.

Terima kasih atas respon cepatnya!
Itu akan sulit karena repo saat ini bersifat pribadi di organisasi saya ... Saya akan memberi tahu Anda jika saya mendapatkannya :)

Ini terus terjadi pada saya dengan jest v^24.6.0 dan node v10.14.2 . Tahu kenapa?

Saya baru-baru ini memutakhirkan beberapa dependensi dalam sebuah proyek dan saya tidak memiliki masalah apa pun, saya menghadapi ini satu bulan yang lalu, tetapi itu diselesaikan dalam versi yang lebih baru, saya percaya ...

Bisakah Anda membagikan versi yang Anda gunakan sekarang, ketika itu diselesaikan?

Pada Senin, 5 Agustus 2019 pukul 12:43 PM Norman Enmanuel [email protected]
menulis:

Terima kasih atas respon cepatnya!
Itu akan sulit karena repo saat ini bersifat pribadi di organisasi saya ... Saya akan membiarkan
Anda tahu jika saya mendapatkannya :)

Saya baru-baru ini meningkatkan beberapa dependensi dalam sebuah proyek dan saya tidak punya
masalah, saya menghadapi ini satu bulan yang lalu, tetapi saya diselesaikan dalam versi yang lebih baru saya
meyakini...


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/facebook/jest/issues/3853?email_source=notifications&email_token=AB6F4PAE3CHUMEBP7IYXRPLQC7Y2DA5CNFSM4DPZ3JSKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTLOR5W16W2ZDDNOR5WSXHJKTOR
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AB6F4PFXDSHRHBW5CMTT2DKDQC7Y2DANCNFSM4DPZ3JSA
.

Bisakah Anda membagikan versi yang Anda gunakan sekarang, ketika itu diselesaikan?

Tentu:

bersenda gurau

^24.8.0

simpul -v

v10.16.0

Dan ini adalah beberapa script npm yang saya gunakan untuk menjalankan keduanya, e2e, integration, unit dan acceptance:

"scripts": {
  "test": "NODE_ENV=test npm run test:unit && npm run test:integration:both",
  "test:unit": "NODE_ENV=test jest --config test/jest.config.unit.js --detectOpenHandles",
  "test:integration": "NODE_ENV=test MOCK=false jest --config test/jest.config.integration.js --runInBand --detectOpenHandles",
  "test:integration:mock": "NODE_ENV=test MOCK=true jest --config test/jest.config.integration.js --runInBand --detectOpenHandles",
  "test:integration:both": "NODE_ENV=test npm run test:integration:mock -- --coverage; npm run db:migration:test; npm run test:integration -- --coverage;",
  "test:report": "open docs/test/report/index.html",
  "test:report:coverage": "open docs/test/coverage/lcov-report/index.html"
}

Dan ini adalah jest.config:

"use strict";

module.exports = {
  "bail": true,
  "verbose": false,
  "collectCoverage": false,
  "expand": true,
  "testURL": "http://localhost:3000/",
  "coverageDirectory": "./docs/test/coverage",
  "testEnvironment": "node",
  "rootDir": "../",
  "setupFilesAfterEnv": [
    "./test/jest.setup.js"
  ],
  "jest.showCoverageOnLoad": true,
  "watchPathIgnorePatterns": ["node_modules"],
  "transform": {
    "^.+\\.js$": "babel-jest",
    '^.+\\.tsx?$': 'ts-jest',
  },
  "reporters": [
    "default",
    ["./node_modules/jest-html-reporter", {
      "pageTitle": "...",
      "outputPath": "./docs/test/report/index.html",
      "includeFailureMsg": true,
      "sort": "titleAsc",
      "dateFormat": "yyyy-mm-dd HH:MM:ss"
    }]
  ]
};

Semoga membantu.

Saya akan mencoba mencari waktu untuk mereproduksi ini. Sampai saat itu saya menemukan log saya dimakan oleh hasil seperti yang Anda lihat di bawah. Sebelum FAIL muncul, Anda dapat melihat 2 log saya di sana. Dan juga nilainya hanya 2 log yang dihapus. Jika saya menambahkan 10 log di bawah satu sama lain, 8 akan ditampilkan. Saya pikir itu awal yang baik :)

ezgif com-gif-maker

@kresli Apa bilah status dan keluaran waktu yang Anda miliki di sini? Ketika saya menjalankan test suite saya, saya melihat _RUN HARNESS test-harness/index.js_ dan tidak ada yang lain sampai semuanya berjalan. Saya kemudian melihat pesan console.log saya di bagian paling akhir dan baris dengan _RUN HARNESS..._ berubah menjadi _MEMANFAATKAN...._

Pembaruan: harap abaikan, ternyata ada masalah dalam kode saya

Masih menghadapi ini dengan simpul v12.16.1, lelucon 25.5.4, TypeScript 3.8.3 di MacOS. Mencoba rekomendasi menggunakan --runInBand, menonaktifkan/mengaktifkan verbose, menggunakan --silent=true, itu tidak membantu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat