I updated Cypress from 3.0.3
to 3.1.3
. Im using ES6 import/export modules which must be working related to docs. But Im getting a line with undefined
in terminal and following error in the GUI:
<root_dir>/node_modules/@babel/runtime/helpers/esm/defineProperty.js:1
export default function _defineProperty(obj, key, value) {
^
ParseError: 'import' and 'export' may appear only with 'sourceType: module'
My tests are in vanilla JS, no TS os CoffeeScript. Im stuck, in 3.0.3
it worked fine.
There is an official sample on github available at this address https://github.com/cypress-io/cypress-example-recipes/tree/master/examples/preprocessors__typescript-webpack
Note: if you are on windows and want to run localy the project, first update the path in the package.json.
In case people are coming here for the message...
... in a Cypress TypeScript project. Here is the answer:
Cypress does support TypeScript out of the box, as long as you have a
tsconfig.json
file. However, imports don't work unless you preprocess your TypeScript files.Here are the steps:
yarn add -D webpack
yarn add -D ts-loader
yarn add -D @cypress/webpack-preprocessor
Now, make sure you have these 3 files,
tsconfig.json
,webpack.config.js
andplugins/index.js
on your Cypress folder.plugins/index.js
:tsconfig.json
:webpack.config.js
:It should just work now.
This error is caused by the presence of modern keywords like "import" and "export" when Cypress runs in the browser. Unlike Selenium or Protractor -- it actually runs inside the browser. Since browsers don't support modern JS yet, you'll need to use webpack or browserify to transpile your code.
https://docs.cypress.io/api/plugins/preprocessors-api.html#Examples
Here is a fantastic blog post on how to get Cypress to work with modern JS and Typescript using webpack: https://glebbahmutov.com/blog/use-typescript-with-cypress/
^^ The post is focused on TypeScript, but the configuration options for Javascript will be similar.
The following npm packages must be installed and in your package.json:
Webpack should be installed using:
The following should be present under the "compilerOptions" section of a file called tsconfig.json in your root directory, with "allowJs" set to true for non-typescript users:
A file called "webpack.config.js" should be present in your root directory with the following:
And these exports should be present under cypress/plugins/index.js:
Note this final bit at the end of the Cypress plugins file,
That is where Cypress is told to process your modern JS code in such a way as to make it Cypress-runnable.
I solved it, in my root folder was a
babel.config.js
file which possibly overrode Cypress configs. After I deleted it, everything is working. ¯\_(ツ)_/¯Update: Maybe the magic was readd the
babel.config.js
with this content based on this issue: https://github.com/cypress-io/cypress/issues/2945