这个错误是由于在 Cypress 运行于浏览器时出现了像 "import" 和 "export" 这样的现代关键字所导致的。与 Selenium 或 Protractor 不同,Cypress 实际上是在浏览器内运行的。由于浏览器尚未支持现代 JS,因此您需要使用 webpack 或 browserify 来转译您的代码。
https://docs.cypress.io/api/plugins/preprocessors-api.html#Examples
以下博客文章介绍了如何使用 webpack 让 Cypress 能够与现代 JS 和 TypeScript 一起工作:
https://glebbahmutov.com/blog/use-typescript-with-cypress/
^^ 该文章专注于 TypeScript,但对于 JavaScript 的配置选项将会相似。
以下 npm 包必须安装并在 package.json 中声明:
"@cypress/webpack-preprocessor": "^4.1.0",
"cypress": "^3.3.1",
"ts-loader": "^6.0.3",
"typescript": "^3.5.2",
"webpack": "^4.34.0"
应使用以下方式安装Webpack:
npm install --save-dev webpack typescript ts-loader
npm install --save-dev @cypress/webpack-preprocessor
对于非TypeScript用户,应在名为tsconfig.json的文件的“compilerOptions”部分中设置“allowJs”为true:
"module": "es6",
"target": "es6",
"types": ["cypress"],
"allowJs": true
您的根目录中应该有一个名为 "webpack.config.js" 的文件,其中包含以下内容:
const path = require('path')
module.exports = {
entry: './src/index.ts',
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
}
]
},
resolve: {
extensions: ['.tsx', '.ts', '.js']
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
}
这些导出应该存在于cypress/plugins/index.js下:
const webpack = require('@cypress/webpack-preprocessor')
module.exports = on => {
const options = {
webpackOptions: require('../../webpack.config'),
watchOptions: {}
}
on('file:preprocessor', webpack(options))
}
请注意Cypress插件文件末尾的最后一节内容,
on('file:preprocessor', webpack(options))
那便是Cypress被告知以一种使其适用于Cypress的方式处理你的现代JS代码的地方。