Saya baru mengenal Jasmine dan baru saja mulai menggunakannya. Saya memiliki file perpustakaan js dengan banyak fungsi yang tidak terkait dengan objek apa pun (yaitu global). Bagaimana cara memata-matai fungsi-fungsi ini?
Saya mencoba menggunakan jendela / dokumen sebagai objek, tetapi mata-mata itu tidak berfungsi meskipun fungsinya dipanggil. Saya juga mencoba membungkusnya dengan benda palsu sebagai berikut:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
dan tes dengan
expect(fakeElement.fakeMethod).toHaveBeenCalled();
Ini tidak berhasil karena mata-mata tidak bekerja
sumber
test = jasmine.createSpy();
untuk memata-matai sudut$anchroScroll
bekerja dengan sempurna$window.open(url, '_blank');
dengan maksud membuka tab baru (atau jendela tergantung pada pengaturan browser). Bagaimana seharusnya saya memastikan bahwa ia memanggil fungsi ini dan memverifikasi bahwa ia menavigasi ke url yang tepat terlepas dari browser?Pengguna TypeScript:
Saya tahu OP bertanya tentang javascript, tetapi untuk setiap pengguna TypeScript yang menemukan ini yang ingin memata-matai fungsi yang diimpor, inilah yang dapat Anda lakukan.
Di file uji, konversi impor fungsi dari ini:
Untuk ini:
Maka Anda dapat memata-matai
FooFunctions.foo
:)sumber
export const FooFunctions = { bar, foo };
dan impor dalam tes menjadiimport { FooFunctions } from '../foo_functions'.
Namun, alias masih perlu secara eksplisit digunakan dalam implementasi pribadi foo_functions untuk mata-mata untuk bekerja.const result = FooFunctions.foo(params)
// laporan mata-mata panggilanconst result = foo(params)
// mata-mata melaporkan tidak ada panggilanError: <spyOn> : parseCookie is not declared writable or has no setter
Ada 2 alternatif yang saya gunakan (untuk melati 2)
Yang ini tidak terlalu eksplisit karena tampaknya fungsinya sebenarnya palsu.
Yang kedua lebih verbose, lebih eksplisit, dan "bersih":
-> kode sumber melati untuk melihat argumen kedua
sumber
Cara yang sangat sederhana:
sumber
Ini berhasil untuk saya.
sumber
Jawaban saya sedikit berbeda dengan @FlavorScape di mana saya memiliki fungsi tunggal (ekspor standar) dalam modul yang diimpor, saya melakukan hal berikut:
sumber