Jest тест не сбрасывает значение макета должным образом - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь протестировать опору стиля компонента, которая изменяется в зависимости от возврата функции с именем isIphoneX.Из-за этого я написал 2 тестовых случая, в которых я по-разному высмеиваю возвращаемое значение этой функции для каждого.Поэтому я ожидаю, что компонент будет каждый раз иметь различный стиль.

Первый тест проходит (так как isIphoneX оценивается как false), но второй тест продолжает получать 80 обратно, вместо 110 для высоты.

Обратите внимание, что я уже пытался использовать:

jest.clearAllMocks (), jest.resetAllMocks (), jest.resetModules (), снаружи, внутри и внутри beforeEach / afterEach.

Я полагаю, что проблема связана с компонентом CameraOverlay, запущенным до того, как isIphoneX может быть смоделирован.

// CameraOverlay.js

import { isIphoneX } from 'utils/device';

const styles = StyleSheet.create({
  capturePanel: {
    height: isIphoneX() ? 110 : 80,
  },
});

const CameraOverlay = () => (
  <View style={styles.capturePanel} testID="capturePanel">
    Some dummy text
  </View>
);

export default CameraOverlay;
// CameraOverlay.test.js
import { shallow } from 'enzyme';
import CameraOverlay from 'components/CameraOverlay';
import { isIphoneX } from 'utils/device';

jest.mock('utils/device');


describe('<View style={styles.capturePanel} testID="capturePanel">', () => {
    let wrapper;
    beforeEach(() => {
      wrapper = shallow(<CameraOverlay {...defaultProps} />);
    });
    it('renders correct style height for standard devices', () => {
      isIphoneX.mockReturnValue(false);
      expect(
        wrapper.find({ testID: 'capturePanel' }).prop('style').height,
      ).toEqual(80);
    });
    it('renders correct style height for iPhone X (and newer) devices', () => {
      isIphoneX.mockReturnValue(true);
      expect(
        wrapper.find({ testID: 'capturePanel' }).prop('style').height,
      ).toEqual(110);
    });
  });

...