Значение шутки на тест - PullRequest
       6

Значение шутки на тест

0 голосов
/ 22 октября 2018

Я хочу проверить, не вызывается ли библиотечная функция, когда значение токена равно нулю.Для этого я должен изменить фиктивное значение GOOGLE_ANALYTICS_TRACKING_ID между юнит-тестами.Он хранится в «config.js», который выглядит следующим образом:

module.exports = {
  GOOGLE_ANALYTICS_TRACKING_ID: process.env.GOOGLE_ANALYTICS_TRACKING_ID
};

Также он используется с GoogleAnalytics, который является HOC.Внутри него я импортирую конфигурацию следующим образом:

import { GOOGLE_ANALYTICS_TRACKING_ID } from 'config';

Мой тест выглядит так:

import React from 'react';
import { shallow } from 'enzyme';
import ReactGA from 'react-ga';

import withGoogleAnalytics from '../withGoogleAnalytics';

jest.mock('react-ga', () => ({
  pageview: jest.fn(),
  initialize: jest.fn()
}));

jest.mock('config', () => ({ GOOGLE_ANALYTICS_TRACKING_ID: '123' }));

const Component = withGoogleAnalytics(() => <div />);

describe('HOC withGoogleAnalytics', () => {
  describe('render', () => {
    const shallowWrapper = shallow(<Component />);

    it('should fire initialize action', () => {
      expect(ReactGA.initialize).toHaveBeenCalledWith('123');
    });

    it('should have pageview prop set', () => {
      expect(shallowWrapper.prop('pageview')).toBe(ReactGA.pageview);
    });

    it('should not fire initialize action', () => {
      expect(ReactGA.initialize).not.toHaveBeenCalled();
    });
  });
});

Из того, что я прочитал в StackOverflow и GitHub, я должен быть в состоянии сделать это с помощьюjest.resetModules () и jest.mockImplementation (), но все примеры были насмешливыми функциями.Здесь мне нужно изменить строковое значение между тестами.Как я могу это сделать?

1 Ответ

0 голосов
/ 22 октября 2018

Модуль, основанный на проверенном модуле, должен быть импортирован после jest.mock.Этого не произойдет, если import находится в области видимости модуля и jest.mock выполняется за тест.

Назначение shallowWrapper один раз для всего костюма является плохим и приводит к перекрестному загрязнению теста.

Это должно быть:

let shallowWrapper;
let withGoogleAnalytics;

beforeEach(async () => {
  shallowWrapper = shallow(<Component />)
  jest.mock('config', () => ({ GOOGLE_ANALYTICS_TRACKING_ID: '123' }));
  withGoogleAnalytics = (await import('../withGoogleAnalytics')).default;
});

Если необходимо провести проверку сдругое значение GOOGLE_ANALYTICS_TRACKING_ID, можно создать другое значение describe с блоком с другим значением beforeEach.

...