Hai,
Saya rasa ada bug di 'json_formatter.js' pada baris 213, lihat cuplikan di bawah ini:
if (status === _status2.default.FAILED && exception) {
data.result.error_message = exception.stack || exception;
}
Setiap pengujian yang gagal akan menghasilkan jejak tumpukan yang dicatat ketika IMO itu harus menjadi exception.message minimal dan berpotensi jejak tumpukan juga (akan lebih baik jika Anda dapat mengaktifkan/menonaktifkan kesalahan pelacakan tumpukan).
Dapatkah seseorang mengonfirmasi apakah ini bug dan bagaimana cara mengatasinya.
Saya menjalankan NightwatchJS dengan CucumberJS, detail lingkungan saya adalah sebagai berikut:
Simpul - v8.7.0
Mentimun - v3.03
Jam malam - v0.9.16
Mentimun nightwatch - v8.2.2
Peramban - Chrome v61.0.3163.100
Sopir Chrome - v2.32
Selenium - v3.5.3
Os - Windows 7
Saya telah melampirkan salinan keluaran formatter json yang menunjukkan pesan kesalahan pada baris 86
Salam,
Neville Humphrey
Apakah tidak ada orang lain yang melihat bug ini?
Saya mempertahankan ini adalah bug. Baris kode dalam json_formatter @ 213 harus:
data.result.error_message = exception.message + exception.stack;
dan tidak
data.result.error_message = exception.stack || exception;
Dengan begitu Anda mendapatkan kesalahan pernyataan dan jejak tumpukan.
Saya telah melihat masalah yang sama, bisakah seseorang mengonfirmasi bahwa ini adalah bug?
Ini adalah pengalaman saya di chrome dan node bahwa Error: <message>
adalah baris pertama dari tumpukan. Error: <message>
adalah hasil dari error.toString()
. Kita bisa menggunakan sesuatu seperti:
let msg = exception
if (exception.stack) {
msg = exception.stack
if (!_.includes(msg, error.toString()) {
msg = error.toString() + '\n' + msg
}
}
data.result.error_message = msg
Dapat mengkonfirmasi tumpukan tidak termasuk pesan di safari. Saya melihat pesan di tumpukan di chrome 61 dan node 8.
Saya mengalami masalah yang sama menggunakan mentimun nightwatch (kegagalan akan sering menghasilkan pesan kesalahan tanpa tumpukan). Ini bug bagi saya
let error_message = _.includes(exception.stack, exception.message) ? '' : exception.message + '\n';
error_message += exception.stack;
data.result.error_message = error_message || exception;
Jika pesan pengecualian disertakan dalam tumpukan, solusi ini mungkin memberikan error_message tanpa pengulangan. Jika tidak, pesan pengecualian diletakkan sebelumnya.
Halo,
Kami memiliki masalah serupa di baris yang sama, tetapi karena jenis elemen ini.
Ke dalam file laporan json yang dihasilkan, error_message adalah string ATAU objek. Bisakah kita memiliki konsistensi di sini? Menunggu untuk mendengar pendapat orang tentangnya.
Masalah bagi kami adalah ketika kami mencoba membuat laporan html dari json. Saat ini, pustaka mentimun-html-reporter mengharapkan error_message ini menjadi string. Ketika kami mendapatkannya sebagai objek, reporter html gagal.
Lebih jauh, kami mendapatkan perbedaan tipe ini karena pengujian menggunakan perpustakaan browser yang berbeda. Setiap kali kami menjalankan pengujian menggunakan webdriverio, pembuatan laporan akan berlalu. Tetapi menggunakan webdriverjs-angular, report.json akan memiliki error_message sebagai objek dan dengan demikian kegagalan saat membuat laporan html.
Berdasarkan tanggapan Anda, saya mungkin perlu mengangkat masalah di tempat yang berbeda, tetapi saya pikir tempat terbaik untuk memulainya adalah untuk melihat apakah kita dapat memiliki konsistensi pada jenis error_message.
Terima kasih!
Hi finaruioana,
Dalam versi lokal mentimun/lib/formatter/json_formatter.js Anda, dapatkah Anda menguji apakah mengubah baris 213 ke baris berikut berfungsi untuk Anda:
let error_message = _lodash.includes(exception.stack, exception.message) ? '' : exception.message + '\n';
error_message += exception.stack;
data.result.error_message = error_message || exception;
Jika ya, saya dapat mengajukan permintaan tarik dengan perbaikan di atas, karena sepertinya tidak ada daya tarik pada masalah ini.
Hai @humphreyn
Memang, membuat perubahan di atas memecahkan masalah saya. Saya juga menambahkan if pada stack sebelum menambahkannya, dalam kasus saya menambahkan undefined.
javascript
let error_message = _lodash.includes(exception.stack, exception.message) ? '' : exception.message + '\n';
if (exception.stack) {
error_message += exception.stack;
}
data.result.error_message = error_message || exception;
Terima kasih!
Saya menerima begitu saja bahwa pengecualian adalah objek dengan pesan dan tumpukan yang ditentukan, tetapi jika itu tidak selalu terjadi, diperlukan penyesuaian kecil:
let msg = exception.message || '';
let stack = exception.stack || '';
msg = _.includes(stack, msg) ? '' : (msg + '\n');
data.result.error_message = (msg + stack) || exception;
Kode ini mencegah "tidak terdefinisi" untuk ditambahkan ke error_message jika pesan atau tumpukan tidak ditentukan. Jika keduanya tidak terdefinisi atau string kosong, objek pengecualian ditetapkan ke error_message. Jika kita ingin menerapkan string error_message kita dapat menggunakan JSON.stringify
:
let msg = exception.message || '';
let stack = exception.stack || '';
msg = _.includes(stack, msg) ? '' : (msg + '\n');
data.result.error_message = (msg + stack) || JSON.stringify(exception);
@finaruioana Anda berpikir bahwa solusi ini akan baik-baik saja (untuk menguji di lingkungan lokal Anda harus menggunakan _lodash
bukannya _
)
let msg = exception.message || '';
let stack = exception.stack || '';
msg = _lodash.includes(stack, msg) ? '' : (msg + '\n');
data.result.error_message = (msg + stack) || exception;
ya, terlihat bagus @innocentiv. Sudah dicoba dan sepertinya berfungsi dengan baik.
@innocentiv , saya juga dapat mengonfirmasi bahwa perubahan itu berfungsi secara lokal untuk saya di chrome, yaitu dan firefox dengan pengaturan berikut:
nodejs: v8.9.0
mentimun: v 3.1.0
nightwatch-mentimun: v0.9.16
selenium mandiri: v3.4.0
yaitu webdriver: v3.4.0
chrome webdriver: v2.33
gecko (firefox) webdriver: v0.19.1
Apakah Anda akan mengirimkan permintaan tarik untuk menerapkan perbaikan ini?
@humphreyn Tarik permintaan: #973
Saya baru saja memodifikasi permintaan tarik untuk memeriksa pengecualian string. Anda dapat mengujinya secara lokal menggunakan:
if (_lodash2.default.isString(exception)) {
data.result.error_message = exception;
} else {
var _exception$message = exception.message,
message = _exception$message === undefined ? '' : _exception$message,
_exception$stack = exception.stack,
stack = _exception$stack === undefined ? '' : _exception$stack;
message = _lodash2.default.includes(stack, message) ? '' : message + '\n';
data.result.error_message = message + stack || JSON.stringify(exception);
}
Utas ini telah dikunci secara otomatis karena tidak ada aktivitas terbaru setelah ditutup. Silakan buka edisi baru untuk bug terkait.
Komentar yang paling membantu
Hi finaruioana,
Dalam versi lokal mentimun/lib/formatter/json_formatter.js Anda, dapatkah Anda menguji apakah mengubah baris 213 ke baris berikut berfungsi untuk Anda:
Jika ya, saya dapat mengajukan permintaan tarik dengan perbaikan di atas, karena sepertinya tidak ada daya tarik pada masalah ini.