こんにちは、kazuです。
基本のJestサンプルを作成していましたのでそれを記事にしようと思います。
コードを見てみよう
import React from 'react';
import { View, Text } from 'react-native';
import CustomComponent from './CustomComponent';
import DataComponent from './DataComponent';
const App: React.FC = () => (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<CustomComponent title="Hello">
<Text>Welcome to React Native!</Text>
</CustomComponent>
<DataComponent />
</View>
);
export default App;
import React, { ReactNode } from 'react';
import { View, Text, StyleSheet } from 'react-native';
interface CustomComponentProps {
title: string;
children: ReactNode;
}
const CustomComponent: React.FC = ({ title, children }) => (
<View style={styles.container}>
<Text style={styles.title}>{title}</Text>
{children}
</View>
);
export default CustomComponent;
const styles = StyleSheet.create({
container: {
padding: 20,
backgroundColor: '#f0f0f0',
},
title: {
fontSize: 20,
fontWeight: 'bold',
},
});
import React from 'react';
import {Text } from 'react-native'
import { render,screen } from '@testing-library/react-native';
import CustomComponent from './CustomComponent';
import '@testing-library/jest-dom'
describe('CustomComponent', () => {
it('テキストが表示されているかどうかを確認する', () => {
render(
<CustomComponent title="Test Title">
<Text>Test Children</Text>
</CustomComponent>
);
expect(screen.getByText('Test Title')).toBeTruthy();
expect(screen.getByText('Test Children')).toBeTruthy();
});
it('styleが正しく設定されていること', () => {
const { getByText } = render(<CustomComponent title="Test" />);
const textElement = getByText('Test');
const styles = textElement.props.style;
// スタイルプロパティの検証
expect(styles.fontSize).toBe(20);
expect(styles.fontWeight).toBe('bold')
});
});
モックに関するコード
import SVGimage from './path/to/SVGimage.svg';
import SVGimage2 from './path/to/SVGimage2.svg';
const svg = (id) => {
switch(id) {
case 'svgsample1':
return <svgimage width="100" height="100" viewport="{10,10,10,10}" data-testid="svg-size1"/>;
case 'svgsample2':
return <svgimage width="200" height="200" viewport="{20,20,20,20}" data-testid="svg-size2"/>;
case 'svgsample3':
return <svgimage2 width="300" height="300" viewport="{30,30,30,30}" data-testid="svg-size3"/>;
// 他のケース...
}
};
import React from 'react';
import { View, Text } from 'react-native';
const SvgMock = ({ width, height, viewport, ...props }) => {
return (
<View {...props} testID={props.testID}>
<Text testID="mock-svg-width">{width}</Text>
<Text testID="mock-svg-height">{height}</Text>
<Text testID="mock-svg-viewport">{viewport}</Text>
</View>
);
};
import { render, screen } from '@testing-library/react-native';
import svg from './src/svg';
describe('svg function', () => {
it('renders correct SVG for svgsample1', () => {
render(<Svg id="svgsample1" />);
const svgComponent = screen.getByTestId('svg-size1');
expect(svgComponent).toBeTruthy();
const width = screen.getByTestId('mock-svg-width');
const height = screen.getByTestId('mock-svg-height');
const viewport = screen.getByTestId('mock-svg-viewport');
expect(width.props.children).toBe('100');
expect(height.props.children).toBe('100');
expect(viewport.props.children).toBe('10,10,10,10');
});
it('case svgsample2', () => {
render(<Svg id="svgsample2" />);
const svgComponent = screen.getByTestId('svg-size2');
expect(svgComponent).toBeTruthy();
const width2 = screen.getByTestId('mock-svg-width');
const height2 = screen.getByTestId('mock-svg-height');
const viewport2 = screen.getByTestId('mock-svg-viewport');
expect(width2.props.children).toBe('200');
expect(height2.props.children).toBe('200');
expect(viewport2.props.children).toBe('20,20,20,20');
});
it('case svgsample3', () => {
render(<Svg id="svgsample3" />);
const svgComponent = screen.getByTestId('svg-size3');
expect(svgComponent).toBeTruthy();
const width = screen.getByTestId('mock-svg-width');
const height = screen.getByTestId('mock-svg-height');
const viewport = screen.getByTestId('mock-svg-viewport');
expect(width.props.children).toBe('300');
expect(height.props.children).toBe('300');
expect(viewport.props.children).toBe('30,30,30,30');
});
// 他のケースに対するテスト...
});