Import project module in Cypress

Nuthinking picture Nuthinking · Nov 10, 2018 · Viewed 7.8k times · Source

I want to import some constants from my project into my tests (for instance to test localstorage operations). While using import (or require) from my IDE doesn't show errors:

enter image description here

When running Cypress I get: Error: Cannot find module

enter image description here

The module is in TypeScript (Config.ts) despite doesn't use any particular feature.

I didn't modify any of the Command or Support script. But I have in the Cypress folder a tsconfig.json so that my Create React App can run without conflict with Jest.

{
  "extends": "../tsconfig",
  "include": ["../node_modules/cypress/types", "**/*.ts"]
}

I tried to add ../src or ../src/**/*.ts in the include but nothing seem to work.

What am I doing wrong? Thanks!

Answer

Julien Malige picture Julien Malige · Jan 22, 2019

Add webpack, cypress-webpack-preprocessor and ts-loader if they are not already present:

yarn add --dev webpack @cypress/webpack-preprocessor ts-loader

In cypress/plugins/index.js just add this to your config:

const wp = require('@cypress/webpack-preprocessor')

module.exports = (on) => {
  const options = {
    webpackOptions: {
      resolve: {
        extensions: [".ts", ".tsx", ".js"]
      },
      module: {
        rules: [
          {
            test: /\.tsx?$/,
            loader: "ts-loader",
            options: { transpileOnly: true }
          }
        ]
      }
    },
  }
  on('file:preprocessor', wp(options))
}

Cypress should now load your TS files.

More information about a full TS config: https://basarat.gitbooks.io/typescript/docs/testing/cypress.html