Saya mencoba untuk menghentikan metode menggunakan sinon.js tetapi saya mendapatkan kesalahan berikut:
Uncaught TypeError: Attempted to wrap undefined property sample_pressure as function
Saya juga pergi ke pertanyaan ini ( Menghentikan dan / atau mengejek kelas di sinon.js? ) Dan menyalin dan menempelkan kode tetapi saya mendapatkan kesalahan yang sama.
Ini kode saya:
Sensor = (function() {
// A simple Sensor class
// Constructor
function Sensor(pressure) {
this.pressure = pressure;
}
Sensor.prototype.sample_pressure = function() {
return this.pressure;
};
return Sensor;
})();
// Doesn't work
var stub_sens = sinon.stub(Sensor, "sample_pressure").returns(0);
// Doesn't work
var stub_sens = sinon.stub(Sensor, "sample_pressure", function() {return 0});
// Never gets this far
console.log(stub_sens.sample_pressure());
Ini adalah jsFiddle ( http://jsfiddle.net/pebreo/wyg5f/5/ ) untuk kode di atas, dan jsFiddle untuk pertanyaan SO yang saya sebutkan ( http://jsfiddle.net/pebreo/9mK5d/1/ ).
Saya memastikan untuk menyertakan sinon di Sumber Daya Eksternal di jsFiddle dan bahkan jQuery 1.9. Apa yang saya lakukan salah?
sumber
.returns(0)
sudah melakukan hal yang sama seperti.callFake(() => 0)
.returns
usang. sinonjs.org/releases/v3.0.0/stubs . @ danday74, berikan referensi..stub
dengan fungsi sebagai argumen ketiga dihapus: github.com/sinonjs/sinon/blob/master/lib/sinon/stub.js#L17 Tidak ada yang salah dengan.returns
or.callsFake
, jadi tidak ada yang salah dengan jawaban ini.Jawaban teratas sudah tidak digunakan lagi. Anda sekarang harus menggunakan:
Atau untuk metode statis:
Atau untuk kasus sederhana, gunakan saja pengembalian:
Atau jika Anda ingin menghentikan metode sebagai contoh:
sumber
sinonjs
iecallsFake()
terlebih lagi, untuk versi yang lebih lama bagaimana ini bisa dihentikan?Saya mengalami kesalahan yang sama saat mencoba meniru metode kelas CoffeeScript menggunakan Sinon.
Diberikan kelas seperti ini:
Anda dapat mengganti metodenya dengan mata-mata dengan cara ini:
Cukup ganti
spy
denganstub
ataumock
sesuai kebutuhan.Perhatikan bahwa Anda harus mengganti
assert.ok
dengan pernyataan apa pun yang dimiliki kerangka pengujian Anda.sumber
Terima kasih kepada @loganfsmyth untuk tipnya. Saya bisa mendapatkan rintisan untuk mengerjakan metode kelas Ember seperti ini:
sumber
Foo.prototype.constructor
, sedangkan jawaban aslinya adaSensor.prototype
. Kemudian lagi,Foo.prototype.constructor
tidak berhasil untuk saya. :)