We use alias imports in the application component folder, and in my component tests I need to use imports as well like this
import {InputField} from "@company/components/Input"
But whenever I try to run cypress, it gives me this error
I have my folder structure like this
/project
/cypress
/plugins
/index.js
/components
/input.component.tsx
/input.cy.tsx
tsconfig.json
/src
/components
/input.tsx
/button.tsx
/form.tsx
...
...
tsconfig.json
tsconfig.paths.json
The tsconfig.paths.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@company/*": ["./src/*"]
}
}
}
The tsconfig.json in the project root folder has the below configuration
{
"extends": "./tsconfig.paths.json",
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": ["src", "cypress"],
"exclude": []
}
The project/cypress/tsconfig.json
{
"extends": "../tsconfig.json"
}
cypress.config.js
/* eslint-disable @typescript-eslint/no-var-requires */
import { defineConfig } from "cypress";
export default defineConfig({
video: false,
e2e: {
// We've imported your old cypress plugins here.
// You may want to clean this up later by importing these.
setupNodeEvents(on, config) {
return require("./cypress/plugins/index.js")(on, config);
},
baseUrl: "http://localhost:3000",
experimentalSessionAndOrigin: true,
watchForFileChanges: false,
},
viewportWidth: 1920,
viewportHeight: 1080,
component: {
devServer: {
framework: "create-react-app",
bundler: "webpack",
},
setupNodeEvents(on, config) {
return require("./cypress/plugins/index.js")(on, config);
},
},
});
cypress/plugins/index.js
const cypressTypeScriptPreprocessor = require('./cy-ts-preprocessor')
module.exports = on => {
on('file:preprocessor', cypressTypeScriptPreprocessor)
}
And cypress/plugins/cy-ts-preprocessor.js
const wp = require("@cypress/webpack-preprocessor");
const path = require("path");
const webpackOptions = {
resolve: {
extensions: [".ts", ".js", ".tsx"],
alias: {
"@company": path.resolve(__dirname, "../../src"),
},
},
module: {
rules: [
{
test: /\.ts$/,
exclude: [/node_modules/],
use: [
{
loader: "ts-loader",
},
],
},
],
},
};
const options = {
webpackOptions,
};
module.exports = wp(options);
