Testing Asynchronous Code
Vitest and Jest provide utilities to handle asynchronous code. Let’s consider an example of an asynchronous function:
// fetchData.mjs
export async function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(40);
}, 1000);
});
}
To test this function, we need to handle the asynchronous nature properly:
// fetchData.test.mjs
import { describe, it, expect } from 'vitest';
import { fetchData } from './fetchData';
describe('fetchData.mjs', () => {
// Use the `it` function to define a test case
it('should fetch data correctly', async () => {
// Use the `await` keyword to wait for the asynchronous function to complete
const result = await fetchData();
// Use the `expect` function to make assertions about the output
expect(result).toBe(40);
});
});
Snapshot Testing
Snapshot testing is a technique to test the output of a function by comparing it to a stored snapshot. This is particularly useful for testing UI components. Although Vitest is primarily used for unit testing, it can also handle snapshot testing:
// component.js
export function renderComponent() {
return '<div>Hello World</div>';
}
// component.test.js
import { describe, it, expect } from 'vitest';
import { renderComponent } from './component';
describe('component.js', () => {
it('should render the component correctly', () => {
const output = renderComponent();
expect(output).toMatchSnapshot();
});
});