Tes berikut berperilaku aneh:
it('Should return the exchange rates for btc_ltc', function(done) {
var pair = 'btc_ltc';
shapeshift.getRate(pair)
.then(function(data){
expect(data.pair).to.equal(pair);
expect(data.rate).to.have.length(400);
done();
})
.catch(function(err){
//this should really be `.catch` for a failed request, but
//instead it looks like chai is picking this up when a test fails
done(err);
})
});
Bagaimana saya harus benar menangani janji yang ditolak (dan mengujinya)?
Bagaimana saya harus benar menangani tes gagal (yaitu: expect(data.rate).to.have.length(400);
?
Berikut ini adalah implementasi yang saya uji:
var requestp = require('request-promise');
var shapeshift = module.exports = {};
var url = 'http://shapeshift.io';
shapeshift.getRate = function(pair){
return requestp({
url: url + '/rate/' + pair,
json: true
});
};
Ensure the done() callback is being called in this test
kesalahan ketika mencoba melakukan ini dengan mocha 2.2.5.done
parameter diit
yang akan memilih keluar dari itu.done
dalamit
callback saya , dan secara eksplisit memanggilreturn
(pada janji) di callback adalah cara saya membuatnya berfungsi, seperti dalam cuplikan kode.Alternately, instead of using the done() callback, you may return a Promise. This is useful if the APIs you are testing return promises instead of taking callbacks:
done
parameter keit
panggilan, dan ini masih terjadi ...Seperti yang sudah ditunjukkan di sini , versi Mocha yang lebih baru sudah sadar-Janji. Tapi karena OP bertanya secara spesifik tentang Chai, itu adil untuk menunjukkan
chai-as-promised
paket yang menyediakan sintaksis bersih untuk menguji janji:menggunakan chai-seperti yang dijanjikan
Inilah cara Anda dapat menggunakan chai-as-berjanji untuk menguji keduanya
resolve
danreject
kasus untuk Janji:tanpa chai seperti yang dijanjikan
Untuk memperjelas apa yang sedang diuji, berikut ini contoh kode yang sama tanpa chai-as-janjikan:
sumber
catch
dipanggil ketika salah satuexpect(s)
gagal. Ini memberi kesan yang salah bahwa janji gagal meskipun tidak. Hanya harapan yang gagal.Chai.use
untuk memasangnya. Saya tidak akan pernah mengambilnya dari dokumentasi yang mereka miliki. | :(Inilah pendapat saya:
async/await
Fungsi janji yang tertunda, yang gagal, jika diberi penundaan 0:
Tes positif agak sederhana. Kegagalan yang tidak terduga (disimulasikan oleh
500→0
) akan gagal dalam tes secara otomatis, karena janji yang ditolak meningkat.Tes negatif menggunakan ide coba-tangkap. Namun: 'mengeluh' tentang umpan yang tidak diinginkan hanya terjadi setelah klausa tangkap (dengan demikian, tidak berakhir pada klausa tangkap (), memicu kesalahan lebih lanjut tetapi menyesatkan.
Agar strategi ini berhasil, seseorang harus mengembalikan tes dari klausa tangkapan. Jika Anda tidak ingin menguji hal lain, gunakan yang lain () - blokir.
sumber
Ada solusi yang lebih baik. Kembalikan kesalahan dengan dilakukan di blok tangkap.
tes ini akan gagal dengan pesan berikut:
AssertionError: expected 1 to equal 11
sumber