How to setup vitest in Next.js 14

by Rishav Raj, System Analyst

Introduction

This guide walks you through setting up Vitest with Next.js 14, covering the installation process and configuration steps necessary to enable testing within your Next.js application. By following these instructions and addressing common issues such as absolute imports and SVG file handling, you'll be able to seamlessly integrate Vitest into your Next.js 14 projects. Let's dive in and get testing!

Step 1

Begin by installing the required development dependencies. Choose one of the following methods:

npm install -D vitest @vitejs/plugin-react jsdom @testing-library/react
# or
yarn add -D vitest @vitejs/plugin-react jsdom @testing-library/react
# or
pnpm install -D vitest @vitejs/plugin-react jsdom @testing-library/react
# or
bun add -D vitest @vitejs/plugin-react jsdom @testing-library/react

Once the dependencies are installed, proceed to create a vitest.config.ts or vitest.config.js file in the root directory of your project.

Step 2

Now, configure your vitest.config.ts file as follows:

// vitest.config.ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  test: {
    environment: 'jsdom',
  },
});

With this configuration in place, you've completed the basic setup. However, to execute tests, you need to add a new command to your package.json file. Add the following command under the "scripts" section: "test": "vitest". Now, running npm run test in your terminal should initiate the testing process. Expect to see an error indicating "no test file found" as there are currently no test files.

Step 3

Next, create a test file in your project:

//__test__/sampleTest.tsx

import { describe, test } from 'vitest';
import { render } from '@testing-library/react';
import SampleTest from '@/components/SampleTest';

describe('sample test', () => {
  test('render sample test', () => {
    render(<SampleTest />);
  });
});

Upon running this test, you may encounter an error regarding the import of "your imported file name in test file". This is due to absolute path imports in the test file conflicting with relative paths in the actual file. To resolve this, install vite-tsconfig-paths as a development dependency:

pnpm i -D vite-tsconfig-paths
# or
npm i -D vite-tsconfig-paths
# or
yarn add -D vite-tsconfig-paths
# or
bun add -D vite-tsconfig-paths
  • After installation, update your vitest.config.ts file as follows:
// vitest.config.ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
import tsconfigPaths from 'vite-tsconfig-paths';

//now add tsconfigPaths to the plugins
export default defineConfig({
  plugins: [react(), tsconfigPaths()],
  test: {
    environment: 'jsdom',
  },
});

This addition resolves the absolute import error.

Addressing another common error

If your project contains SVG files, you may encounter an InvalidCharacterError when running tests. To resolve this, install vite-plugin-magical-svg:

pnpm i vite-plugin-magical-svg
# or
npm i vite-plugin-magical-svg
# or
yarn add vite-plugin-magical-svg
# or
bun add vite-plugin-magical-svg

Then, update your vitest.config.ts file:

// vitest.config.ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
import tsconfigPaths from 'vite-tsconfig-paths';
import magicalSvg from 'vite-plugin-magical-svg';

//now add magicalSvg to the plugins
export default defineConfig({
  plugins: [
    react(),
    tsconfigPaths(),
    magicalSvg({
      target: 'react',
    }),
  ],
  test: {
    environment: 'jsdom',
  },
});

With these configurations in place, rerun the tests to verify that they now execute successfully.

Conclusion

This guide has provided a detailed walkthrough of setting up Vitest with Next.js 14. By following these steps and configurations, you can seamlessly integrate Vitest into your Next.js projects, enabling efficient and effective testing of your React components. With Vitest, you can ensure the reliability and stability of your Next.js applications. Happy testing!

Resources

More articles

Understanding AI Orchestrators, Agents, Tools, and Workflow Automation

Discover how AI orchestrators, agents, and tools work together to automate workflows, enabling AI to interact with real-world systems efficiently. Learn how this structured approach enhances productivity and reduces manual effort.

Read more

Enhancing AI Capabilities with Tool Calling

Supercharging AI with Tool Calling in NestJS Using AI-SDK

Read more

Ready to Build Something Amazing?

Codemancers can bring your vision to life and help you achieve your goals