Я играю с Джестом и пытаюсь понять, как издеваться над объектом.Большинство примеров, которые я вижу, показывают, как смоделировать функцию.
Это мой компонент AboutScreen.js
import React from 'react';
import { Constants, WebBrowser } from 'expo';
import { View, Text } from 'react-native';
import config from '../config';
const AboutScreen = () => {
const { termsAndConditionsUrl, privacyPolicyUrl } = config;
const { releaseChannel, version } = Constants.manifest;
const channel = (releaseChannel === undefined) ? 'DEV' : releaseChannel;
return (
<View>
<Text>Version: {version}, Release-channel: {channel}</Text>
<Text testId={"t-and-c"} onPress={() => WebBrowser.openBrowserAsync(termsAndConditionsUrl)}>
Terms & conditions
</Text>
</View>
);
};
export default AboutScreen;
Мой тест в AboutScreen.test.js
выглядит следующим образом
import React from 'react';
import { shallow } from 'enzyme';
import config from '../../config';
import AboutScreen from '../AboutScreen';
import { Constants, WebBrowser } from 'expo';
const { termsAndConditionsUrl, privacyPolicyUrl } = config;
jest.mock('expo', () => ({
Constants:{
manifest: {
version: '0.0.1',
releaseChannel: 'PROD',
}},
}));
it('renders with releaseChannel and version', () => {
const wrapper = shallow(<AboutScreen />);
expect(wrapper).toMatchSnapshot();
expect(wrapper).toContain('PROD');
expect(wrapper).toContain('0.0.1');
});
jest.mock('expo', () => ({
Constants:{
manifest: {
version: '0.0.2',
}},
}));
it('renders with default releaseChannel', () => {
const wrapper = shallow(<AboutScreen />);
expect(wrapper).toMatchSnapshot();
expect(wrapper).toContain('DEV');
expect(wrapper).toContain('0.0.2');
});
Для первого теста оболочка должна содержать «PROD» и версию как «0.0.1».
Но для второго теста оболочка должна содержать значение по умолчанию 'DEV'.
Второй тест, похоже, продолжает давать сбой, поскольку макет не переопределяет.
Я пробовал другойтакие параметры, как
jest.mock('expo');
import * as expo from 'expo';
expo.mockReturnValueOnce(); //but fails here as expo has no mockReturnValueOnce
Как я могу решить эту проблему?