Javascript 如何使用Jasmine监视多个类/对象方法

Javascript 如何使用Jasmine监视多个类/对象方法,javascript,angular,typescript,unit-testing,jasmine,Javascript,Angular,Typescript,Unit Testing,Jasmine,有没有比下面更简单的方法来监视对象方法 description('blah-blah',()=>{ 让localStorageSetSpy、localStorageGetSpy; 在每个之前(()=>{ localStorageGetSpy=spyOn(window.localStorage,'getItem'); localStorageSetSpy=spyOn(window.localStorage,'setItem'); }); 它('yada-yada',()=>{ //废话 }) })

有没有比下面更简单的方法来监视对象方法

description('blah-blah',()=>{
让localStorageSetSpy、localStorageGetSpy;
在每个之前(()=>{
localStorageGetSpy=spyOn(window.localStorage,'getItem');
localStorageSetSpy=spyOn(window.localStorage,'setItem');
});
它('yada-yada',()=>{
//废话
})
})
如果我可以监视getter和setter作为同一对象的一部分,那就太好了。我尝试将
window.localStorage
重新分配给
jasmine.createSpyObj(…)
,但收到了关于它是
只读的投诉


有什么想法吗?

如果您只想在测试中与一个对象交互,也许您可以这样做

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

如果您只想在测试中与一个对象交互,也许您可以这样做

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

我会使用一些方法或函数来包装window.localStorage操作。例如
store()
(调用getItem)和
retrieve()
(调用setItem)

一些好处:

  • 您将能够非常轻松地监视和模拟上述功能

  • 将来,只要
    store()
    retrieve()
    的原型保持不变,您就可以更改这些函数的行为,而不必关心内部的操作


  • 我会使用一些方法或函数来包装window.localStorage操作。例如
    store()
    (调用getItem)和
    retrieve()
    (调用setItem)

    一些好处:

  • 您将能够非常轻松地监视和模拟上述功能

  • 将来,只要
    store()
    retrieve()
    的原型保持不变,您就可以更改这些函数的行为,而不必关心内部的操作

  • 也许你可以试试这个。Jasmine createSpyObj也将为您创建间谍。但是,对于localStorage来说,最好是提供一个模拟实现

    也许你可以试试这个。Jasmine createSpyObj也将为您创建间谍。但是,对于localStorage来说,最好是提供一个模拟实现