Sinon: Mata-mata bernama

Dibuat pada 25 Feb 2013  ·  13Komentar  ·  Sumber: sinonjs/sinon

Ini akan membantu dengan keterbacaan pesan kesalahan pernyataan jika mata-mata (selain yang properti objek) bisa dibuat dengan nama. Misalnya, mata-mata Jasmine mengizinkan ini.

Help wanted

Komentar yang paling membantu

Saya melihat ini; selalu dikatakan bahwa namanya adalah proxy - tetapi jika saya Object.defineProperty(spy, 'name', { value: 'new name' }) maka ia akan melaporkan "nama baru".

Akan sangat bagus untuk membukanya kembali.

Semua 13 komentar

Sinon memeriksa nama fungsi yang dibungkus. Jadi Anda bisa memberi nama mata-mata dengan membungkus fungsi bernama kosong.

var spy = sinon.spy(function doStuff() {});

Teknik ini juga memungkinkan Anda menghasilkan fungsi dengan panjang tertentu:

var spy = sinon.spy(function doStuff(a, b, c) {}); // spy.length === 3

Sejauh yang saya bisa lihat, itu selalu "proxy" sebagai nama fungsi. Apakah Anda yakin komentar ini benar?

Sejauh yang saya bisa lihat, itu selalu "proxy" sebagai nama fungsi. Apakah Anda yakin komentar ini benar?

Maukah Anda memposting contoh yang dapat dijalankan?

// test/index.js
var sinon = require('sinon');

var spy = sinon.spy(function doStuff() {
    console.log('Name: ' + spy.name);
});

spy();
➜  sinon-test node test/index.js 
Name: proxy

Saya tidak dapat mengingat apa yang saya lakukan sebelumnya, tetapi saya mendapatkan keluaran Mocha dari pengujian yang gagal di mana nama fungsinya adalah "proxy" dan Anda tidak akan tahu bahwa itu adalah "doStuff". Jika saya dapat mengingat apa sebenarnya itu, saya akan memposting

Saya melihat ini; selalu dikatakan bahwa namanya adalah proxy - tetapi jika saya Object.defineProperty(spy, 'name', { value: 'new name' }) maka ia akan melaporkan "nama baru".

Akan sangat bagus untuk membukanya kembali.

Saya mengatasi ini melalui yang berikut:

const mapMethod = sinon.spy(Array.prototype, 'map');
const methodName = map.wrappedMethod.name;
console.log(methodName); // 'map'

@Tbhesswebber yang tidak berfungsi saat kode non-pengujian mengandalkan nama fungsi.

Ah ... poin yang bagus. Saya sedang mengerjakan kurikulum untuk mengajarkan fungsi tingkat tinggi (menggunakan Array.prototype sebagai titik awal), yang membawa saya ke masalah ini. Kasus penggunaan yang sangat berbeda!

PS - detail implementasi pengujian benar-benar membosankan ketika Anda benar-benar _mencoba_!

Saya dapat melihat bagaimana ini akan berguna. Jika ada yang ingin menggali lebih dalam tentang ini, itu keren.

Mungkin ada fitur atau pengujian yang bergantung pada nama fungsi yang dikembalikan. Jika itu masalahnya, kita harus membahas bagaimana menyiasatinya.

@mroderick saat membuat mata-mata dengan yang asli, Object.defineProperty(spy, 'name', { configurable: true, value: spy.wrappedMethod.name }) harus melakukannya?

Saya pikir ini dulunya adalah fitur yang kami miliki - menamai mata-mata dengan memberi nama fungsi - tebak itu tersesat di jalan. Saya setuju dengan proposal untuk mengizinkan penamaan secara eksplisit. Tapi bukankah kita juga harus mengubah nama "proxy"? Saya merasa fungsi mata-mata harus terlihat sedekat mungkin seperti aslinya. Kami memastikan arity yang benar, tetapi kami mengubah namanya sekarang. Sepertinya salah.

Saya baru menyadari bahwa kami juga memiliki spy.named(name) di API 😆 Ini menetapkan properti displayName pada mata-mata. Itu juga harus mengubah nama fungsi, saya kira. Lihat ini sekarang.

Patch dari # 1987 dirilis di v7.2.7 . Beri tahu kami jika ini memuaskan untuk semua orang ❤️

Apakah halaman ini membantu?
0 / 5 - 0 peringkat