Saya memiliki fungsi yang ingin saya uji yang memanggil metode API eksternal dua kali, menggunakan parameter yang berbeda. Saya ingin mengejek API eksternal ini dengan mata-mata Jasmine, dan mengembalikan hal-hal berbeda berdasarkan parameter. Apakah ada cara untuk melakukan ini di Jasmine? Yang terbaik yang bisa saya lakukan adalah hack menggunakan andCallFake:
var functionToTest = function() {
var userName = externalApi.get('abc');
var userId = externalApi.get('123');
};
describe('my fn', function() {
it('gets user name and ID', function() {
spyOn(externalApi, 'get').andCallFake(function(myParam) {
if (myParam == 'abc') {
return 'Jane';
} else if (myParam == '123') {
return 98765;
}
});
});
});
and.callFake
- jasmine.github.io/2.2/… >spyOn(fake, 'method').withArgs('abc').and.returnValue('Jane')
danspyOn(fake, 'method').withArgs('123').and.returnValue(98765)
..withArgs
tidak bekerja untuk saya di melati 2.0.withArgs
tidak benar-benar tersedia - maksud saya metode seperti itu masuk akal ketika menulis tes.Anda juga bisa menggunakan
$provide
untuk membuat mata-mata. Dan mengejek menggunakanand.returnValues
bukannyaand.returnValue
untuk meneruskan data parameter.sumber
returnValues
untuk mendukung beberapa panggilanexternalApi.get.and.returnValues('abc','123')
dipanggil di dalamit
fungsi. Kalau tidak, jika Anda menetapkan daftar nilai, di tempat lain, itu tidak akan pernah berhasil karena urutan di mana tes dijalankan tidak dapat diprediksi. Sebenarnya tes seharusnya tidak tergantung pada urutan pelaksanaannya.Dalam kasus saya, saya memiliki komponen yang saya uji dan, dalam konstruktornya, ada layanan konfigurasi dengan metode yang disebut getAppConfigValue yang disebut dua kali, setiap kali dengan argumen yang berbeda:
Dalam spec saya, saya memberikan ConfigService di TestBed seperti:
Jadi, selama tanda tangan untuk getAppConfigValue sama dengan yang ditentukan dalam ConfigService aktual, apa fungsi yang dilakukan secara internal dapat dimodifikasi.
sumber