总结一下最近 jest 上面的经验

mock localStorage

jsdom里面的localStorage是不能通过赋值覆盖的,但是有一个hack就是利用Object.defineProperty。

Object.defineProperty(window, 'localStorage', {
    writable: true,
    value:{
        getItem: jest.fn(),
        setItem: jest.fn()
    }
});

setTimeout

有的时候需要让测试代码以为自己已经跑了一会儿。

jest.useFakeTimers();

jest.advanceTimersByTime();

jest.clearAllTimers();

matchMedia

jsdom 还没提供,需要自己mock。

window.matchMedia = jest.fn(query => ({
    matches: false,
    media: query,
    onchange: null,
    addListener: jest.fn(),
    removeListener: jest.fn(),
}));