javascript - Cum să spionezi mai multe metode ale unei clase/obiect cu Jasmine


Există o modalitate mai scurtă de a spiona metodele unui obiect decât cea următoare?

describe('blah blah', () => {
    let localStorageSetSpy, localStorageGetSpy;

    beforeEach(() => {
        localStorageGetSpy = spyOn(window.localStorage, 'getItem');
        localStorageSetSpy = spyOn(window.localStorage, 'setItem');
    });

    it('yada yada', () => {
        // blah blah
    })
})

Ar fi frumos dacă aș putea spiona getter-ul și setter-ul ca parte a aceluiași obiect. Am încercat să reatribuiesc window.localStorage la jasmine.createSpyObj(...), dar am primit plângeri că este readonly.

Vreo idee?

Răspuns #1

describe('blah blah', () => {
    const localStorageSpy = jasmine.createSpyObj('localStorage',['getItem','setItem']) // Jasmine automatically create a spy for you

    beforeEach(() => {

    });

    it('yada yada', () => {
        localStorageSpy.getItem = (() => { return mockReturnValue(...) }) // Do your test here. 
    })
})

Poate poți încerca asta. Jasmine createSpyObj va crea și el un spy. Totuși, pentru localStorage este bine să vii cu o implementare mock.

Răspunsul #2

Dacă vrei doar să interacționezi cu un singur obiect în testul tău, poate poți face asta

describe('blah blah', () => {
    const localStorageSpy = { getItem: undefined, setItem: undefined };

    beforeEach(() => {
        localStorageSpy.getItem = spyOn(window.localStorage, 'getItem');
        localStorageSpy.setItem = spyOn(window.localStorage, 'setItem');
    });

    it('yada yada', () => {
        localStorageSpy.getItem.mockReturnValue(...)
    })
})