Sinon: Bagaimana kita bisa menimpa penolakan membuat Objek Kesalahan baru?

Dibuat pada 1 Feb 2018  ·  6Komentar  ·  Sumber: sinonjs/sinon

https://github.com/sinonjs/sinon/blob/4310343393b16b92b56526ab4614da4eb2886efa/lib/sinon/default-behaviors.js#L176

Saya mempertahankan beberapa kode yang menolak string dan ini menimbulkan masalah saat pengujian. tangkapan burung bluebird saya tidak bekerja dengan benar.

bluebird.rejects('Something')
    .catch(e => e === 'Something' /* true */, () => console.log(typeof e) /*string*/)
    .catch(() => console.log('should not be here'));

Namun menggunakan sinon.stub().usingPromise('bluebird').rejects('Something'); akhirnya membuat objek kesalahan dengan nama Sesuatu. Tidak diharapkan sama sekali.

Sebelum seseorang mengatakan kami hanya mendukung Janji asli, mari selidiki apa yang mereka lakukan!

Promise.reject('Something')
     .catch(e => {
        console.log(e === 'Something'); // true
        console.log(typeof e); // string
    });

Hmmm, mereka tidak membuat kelas Kesalahan, mereka hanya membuang pengecualian yang diberikan seperti lemparan.

try { 
    throw 'Something'; 
} catch (e) { 
    console.log(e === 'Something');  // true
    console.log(typeof e); // string
}
Bug Help wanted pinned

Komentar yang paling membantu

Kegunaan jejak tumpukan dan diskusi tentang apakah seseorang harus membuat objek kesalahan di samping, saya setuju itu secara umum

const example = sinon.stub().rejects(something);

harus berperilaku sama seperti

const example = () => Promise.reject(something);

Saat ini, tidak demikian halnya jika something adalah string. Menurut saya perilaku saat ini adalah bug.

Semua 6 komentar

Sebelum seseorang mengatakan kami hanya mendukung Janji asli, mari selidiki apa yang mereka lakukan!

Itu adalah kekeliruan manusia jerami . Anda cukup tahu bahwa kami mendukung pustaka promise, saat Anda menggunakannya dalam contoh Anda.

Pengelola Sinon sepenuhnya menyadari cara kerja janji JavaScript, termasuk bahwa Promise.reject() akan memberikan apa pun yang Anda berikan.

Saya mempertahankan beberapa kode yang menolak string

Menurut pendapat saya, menolak janji dengan String alih-alih Error benar-benar merugikan Pengembang Masa Depan, yang harus men-debug apa yang kita tulis hari ini. String tidak terlalu berguna untuk debugging, karena string tidak menangkap jejak tumpukan. Error sebaliknya. Oleh karena itu, menurut saya perilaku rejects() diinginkan, karena hal itu memudahkan penggunaan debugger untuk segera mengetahui apa yang salah.

Sepertinya Anda tidak setuju, tetapi satu-satunya pernyataan yang Anda buat adalah bahwa Sinon tidak memenuhi harapan Anda. Jika menurut Anda perilaku default harus diubah, silakan posting argumen mengapa, perlu diingat bahwa perubahan tersebut berpotensi mempengaruhi banyak pengguna.

Jika ada argumen yang kuat untuk mengubah perilaku default, saya tidak dapat membayangkan salah satu pengelola Sinon akan menentang permintaan tarik untuk mengubahnya.

Masalah ini secara otomatis ditandai sebagai usang karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut. Terima kasih atas kontribusi Anda.

Saya akan mengatakan mungkin ada perbedaan pendapat tentang apakah pelacakan tumpukan benar-benar berguna dalam skenario tertentu atau tidak. Dalam situasi khusus saya, saya sebenarnya tidak peduli dengan pelacakan tumpukan, saya hanya peduli dengan pesan kesalahan dan kemudian meneruskannya ke tempat lain. Jadi saya telah menulis kode untuk menangani alasan penolakan jenis String dan Error. Namun, karena sinon melakukan String -> Error coercion untuk saya, saya tidak dapat menguji cabang kode saya yang menangani string. Karena itu saya tidak bisa mendapatkan perlindungan penuh

Kegunaan jejak tumpukan dan diskusi tentang apakah seseorang harus membuat objek kesalahan di samping, saya setuju itu secara umum

const example = sinon.stub().rejects(something);

harus berperilaku sama seperti

const example = () => Promise.reject(something);

Saat ini, tidak demikian halnya jika something adalah string. Menurut saya perilaku saat ini adalah bug.

Saya setuju.

Masalah ini secara otomatis ditandai sebagai usang karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut. Terima kasih atas kontribusi Anda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat