【问题标题】:How to spy on multiple class/object methods with Jasmine如何使用 Jasmine 监视多个类/对象方法
【发布时间】:2021-02-04 21:03:53
【问题描述】:

是否有比以下更短的监视对象方法的方法?

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

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

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

如果我可以将 getter 和 setter 作为同一个对象的一部分进行监视,那就太好了。我尝试将window.localStorage 重新分配给jasmine.createSpyObj(...),但有人抱怨它是readonly

有什么想法吗?

【问题讨论】:

    标签: javascript angular typescript unit-testing jasmine


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      一些好处:

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

      2. 将来,只要store()retrieve() 的原型保持不变,您就可以更改这些函数的行为,而不必关心内部做了什么。

      【讨论】:

        【解决方案3】:
        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. 
            })
        })
        

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

        【讨论】:

          猜你喜欢
          • 2013-08-31
          • 2017-06-16
          • 1970-01-01
          • 2018-04-20
          • 2022-09-30
          • 2012-03-19
          • 2014-01-19
          • 1970-01-01
          • 2014-01-25
          相关资源
          最近更新 更多