localStorage mock

김_리트리버·2021년 3월 11일
0

localStorage 가 제대로 작동하는지는 test 할 필요는 없다고 생각했다.

local Storage 를 호출하는 함수를 별도로 생성한 후 해당 함수에서 parameter 를 전달하는 식으로 작성했다.

// sotrage.js

export const getItem = (key) => localStorage.getItem(key);

export const setItem = (key, value) => localStorage.setItem(key, value);

export const removeItem = (key) => localStorage.removeItem(key);

위의 함수들의 역할은 단순히 데이터를 전달하는 역할만 수행하므로 test 도 localStorage 에 데이터를 제대로 전달하는 지만 확인하면 된다고 생각했다.

때문에 jest.spyOn() 으로 localStorage 안의 메서드의 call 을 추적하는 것을 test 에 이용하고자 하였다.

Creates a mock function similar to jest.fn but also tracks calls to object[methodName]

Note: By default, jest.spyOn also calls the spied method. This is different behavior from most other test libraries.

@example

const video = require('./video');

test('plays video', () => {
  const spy = jest.spyOn(video, 'play');
  const isPlaying = video.play();

  expect(spy).toHaveBeenCalled();
  expect(isPlaying).toBe(true);

  spy.mockReset();
  spy.mockRestore();
});
import { setItem, getItem, removeItem } from './storage';

describe('localStorage', () => {
  const mockSetItem = jest.spyOn(Storage.prototype, 'setItem');
  const mockGetItem = jest.spyOn(Storage.prototype, 'getItem');
  const mockRemoveItem = jest.spyOn(Storage.prototype, 'removeItem');

  beforeEach(() => {
    jest.clearAllMocks();
  });

  it('sets item', () => {
    setItem('accessToken', '1234');

    expect(mockSetItem).toHaveBeenCalledWith('accessToken', '1234');
  });

  it('gets item', () => {
    getItem('accessToken');

    expect(mockGetItem).toHaveBeenCalledWith('accessToken');
  });

  it('removes item', () => {
    removeItem('accessToken');

    expect(mockRemoveItem).toHaveBeenCalledWith('accessToken');
  });
});
profile
web-developer

0개의 댓글