I created a weather dashboard component in React which consists of a Select Dropdown and based on the values of the Select dropdown, it fetches data, sets states and then renders Charts. Here is the code:
Dashboard.js
function Dashboard() {
const [label, setLabel] = useState(null)
const [labels, setLabels] = useState<String[]>([])
const [data, setData] = useState<Number[]>([])
const options = [
{ value: 'temperature', label: 'Temperature' },
{ value: 'dewPoint', label: 'Dew Point' },
{ value: 'visibility', label: 'Visibility' }
];
const handleChange = async (selectedOption: any) => {
const response = await fetch('http://localhost:3000/getData');
if (!response.ok) {
const message = `An error has occured: ${response.status}`;
throw new Error(message);
}
const jsonData = await response.json();
setLabel(selectedOption.value)
setLabels(jsonData.map((item: { timestamp: any; }) => item.timestamp))
if (selectedOption.value === 'temperature') {
setData(jsonData.map((item: { temperature: any; }) => item.temperature))
} else if (selectedOption.value === 'dewPoint') {
setData(jsonData.map((item: { dewPoint: any; }) => item.dewPoint))
} else {
setData(jsonData.map((item: { visibility: any; }) => item.visibility))
}
}
return (
<div>
<div data-testid = "Select">
<Select options={options} onChange={handleChange}/>
</div>
{label != null && data != null &&
<div data-testid= "charts">
<BarChart data-testid = "BarChart" label = {label} labels={labels} selectedData = {data} />
<RadarChart data-testid = "RadarChart" label = {label} labels={labels} selectedData = {data} />
<LineChart data-testid = "LineChart" label = {label} labels={labels} selectedData = {data} />
</div>
}
{
label == null && data == null &&
<div data-testid= "no-charts">
<h1> No data to fetch. </h1>
</div>
}
</div>
);
}
How would I test this component using Jest. I am looking into tutorials and examples, but I come across simple instances where the component being tested just consists of some html elements. Can I use jest.mock() to test this somehow? How would I get it to fetch the data through Jest? Any advice would be appreciated. I feel stuck and I have been at this for hours.