Membangun tutorial ini menguji aplikasi angularjs dengan chai, saya ingin menambahkan tes untuk nilai yang tidak ditentukan menggunakan gaya "harus". Ini gagal:
it ('cannot play outside the board', function() {
scope.play(10).should.be.undefined;
});
dengan kesalahan "TypeError: Cannot read property 'should' of undefined", tetapi tes lolos dengan gaya "mengharapkan":
it ('cannot play outside the board', function() {
chai.expect(scope.play(10)).to.be.undefined;
});
Bagaimana saya bisa membuatnya bekerja dengan "harus"?
javascript
angularjs
testing
chai
thebenedict
sumber
sumber
assert.isUndefined(scope.play(10))
Jawaban:
Ini adalah salah satu kelemahan dari sintaks should. Ia bekerja dengan menambahkan properti should ke semua objek, tetapi jika nilai kembalian atau nilai variabel tidak ditentukan, tidak ada objek untuk menampung properti.
The dokumentasi memberikan beberapa workarounds, misalnya:
sumber
should.not.exist
akan memvalidasi jika nilainyanull
jadi jawaban ini salah. @ Daniel memiliki jawaban di bawah ini:should.equal(testedValue, undefined);
. Itu harus menjadi jawaban yang diterima.seperti yang disebutkan dalam dokumentasi chai
sumber
.equal()
. Saya bisa mengerti kenapa @OurManInBananas meminta penjelasan. Ini adalah penggunaan tidak terduga dari should sebagai fungsi yang menerima dua argumen, alih-alih bentuk metode rantai yang diharapkan menerima satu argumen untuk nilai yang diharapkan. Anda hanya dapat mencapai ini dengan mengimpor / meminta dan menetapkan versi yang dipanggil.should()
seperti yang dijelaskan dalam jawaban yang diterima oleh @DavidNorman dan dalam dokumentasi ini ..equal
sintaks itu menghasilkan pesan kesalahan yang jauh lebih baik karena memungkinkan Anda mengeluarkan pesan yang lebih deskriptif ketika ada yang gagalUji untuk tidak terdefinisi
Uji null
Uji falsy, yaitu diperlakukan sebagai salah dalam kondisi tertentu
sumber
sumber
Saya berjuang untuk menulis pernyataan harus untuk tes yang tidak ditentukan. Berikut ini tidak berhasil.
Saya menemukan solusi berikut.
jika bisa juga menulisnya sebagai cek tipe
Tidak yakin apakah cara di atas adalah cara yang benar, tetapi berhasil.
Menurut Posting dari hantu di github
sumber
Coba ini:
sumber
Jawaban oleh @ david-norman benar sesuai dokumentasi, saya memiliki beberapa masalah dengan pengaturan dan malah memilih yang berikut ini.
(typeof scope.play (10)). should.be.undefined;
sumber
typeof
operator mengembalikan sebuah string ; jadi pernyataan ini tidak bisa dilewatkan; cuz'undefined' !== undefined
Jangan lupa tentang kombinasi dari
have
dannot
kata kunci:sumber
Anda dapat menggabungkan hasil fungsi Anda
should()
dan menguji jenis "tidak ditentukan":sumber