javascript - Jasmine ile birden fazla sınıf/nesne metodunu nasıl gözetlersiniz


Aşağıdakinden daha kısa bir şekilde nesne metotlarını izlemek mümkün mü?

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

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

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

Getter ve setter'ı aynı nesnenin bir parçası olarak izleyebilseydim güzel olurdu. window.localStorage'ı jasmine.createSpyObj(...)'ye yeniden atamayı denedim ama bunun readonly olduğu konusunda şikayetler aldım.

Herhangi bir fikir?

Cevap #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. 
    })
})

Belki bunu deneyebilirsin. Jasmine createSpyObj ayrıca için de casus oluşturacaktır. Ancak, localStorage için, bir sahte uygulama ile çıkman iyi olur.

Cevap #2

Eğer testinizde sadece bir nesneyle etkileşimde bulunmak istiyorsanız, belki bunu yapabilirsiniz

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(...)
    })
})