DEV Community

Manpreet Bhikhe
Manpreet Bhikhe

Posted on

Path aliases in Cypress

I came across Path Aliases some time ago. Articles mentioning how developers made imports in their React and node projects look nice. I wondered if I could use this feature in my Cypress automation.

Let me give you some context. So typically imports in my project look like this:

import ProductsPage from '../../pages/ProductsPage';
import Navigation from '../../pages/Navigation';
import testData from '../../../../fixtures/product-listing.json'
Enter fullscreen mode Exit fullscreen mode

But with path aliases, the imports look like:

import ProductsPage from '@pages/ProductsPage';
import Navigation from '@pages/Navigation';
import testData from '@fixtures/product-listing.json'
Enter fullscreen mode Exit fullscreen mode

Cleaner, right ?
Follow along to setup path aliases in your cypress project.

Step 1: Webpack preprocessor

Install webpack preprocessor plugin in your project. This will ultimately help to resolve path aliases.

npm install --save-dev @cypress/webpack-preprocessor
Enter fullscreen mode Exit fullscreen mode

Step 2: Webpack Options

Create webpack options which will contain reference of paths to the aliases. You can keep this object in cypress.config.js or separate file as per your preference.

const wpOptions = {
  webpackOptions: {
    resolve: {
      alias: {
        '@pages': path.resolve(__dirname, './cypress/e2e/pages'),
        '@fixtures': path.resolve(__dirname, './cypress/fixtures'),
        '@': __dirname,
      },
    },
  },
  watchOptions: {},
};
Enter fullscreen mode Exit fullscreen mode

Step 3: Configure preprocessor plugin

Next, configure cypress to use webpack preprocessor on every file with options specified in previous step

setupNodeEvents(on, config) {
  on('file:preprocessor', webpackPreprocessor(wpOptions));
}
Enter fullscreen mode Exit fullscreen mode

Step 4: Add paths to jsconfig

This step will enable intellisense for IDE of your choice. Add following settings to jsconfig.json file in project root.

{
  "compilerOptions": {
    "paths": {
      "@pages/*": [
        "./cypress/e2e/pages/*"
      ],
      "@fixtures/*": [
        "./cypress/fixtures/*"
      ],
      "@/*": [
        "./*"
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

That's all !

Now you can create imports like this

import ProductsPage from '@pages/ProductsPage';
import Navigation from '@pages/Navigation';
import testData from '@fixtures/product-listing.json'
Enter fullscreen mode Exit fullscreen mode

Top comments (0)