Я пытаюсь преобразовать свой проект webdriver.io + огурец в Typescript, следуя https://webdriver.io/docs/typescript.html и получая сообщение об ошибке «Неожиданный ток {». Я использую WebDriver.io + TypeScript + Cucumber.
В wdio.conf.js у меня есть огурецOpts, как показано ниже.
cucumberOpts: {
requireModule: [
'tsconfig-paths/register',
() => { require('ts-node').register({files: true}) },
],
require: ['./src/step_definitions/*.ts'],
backtrace: false,
requireModule: [],
dryRun: false,
failFast: false,
format: ['pretty'],
colors: true,
snippets: true,
source: true,
profile: [],
strict: false,
tags: [],
timeout: 60000,
ignoreUndefinedDefinitions: false,
},
И мой tsconfig.json выглядит так:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"esModuleInterop": true,
"removeComments": true,
"noImplicitAny": false,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": [ "./*" ],
"src/*": ["./src/*"]
},
"types": ["node", "@wdio/sync","jest"]
},
"include": [
"./src/**/*"
]
}
и моя структура папок, как показано ниже
src/features/
src/step_definitions
src/pageObjects
И мое определение шага приведено ниже в качестве первого утверждения
import { Given, When, Then } from "cucumber";
Пакет.json
"scripts": {
"test":"./node_modules/.bin/wdio wdio.conf.js"
},
Когда я запускаю свои тесты, я получаю сообщение об ошибке «SyntaxError: Unexpected token {» в первой строке выше в моем файле step.ts.
Как исправить эту ошибку.
Честно говоря, ваш файл конфигурации tsconfig.json
выглядит нормально, меня беспокоит только параметр компилятора "target"
.
Как правило, с опцией "target": "es6"
будет внедрен следующий список библиотек: DOM
, ES6
, DOM.Iterable
и ScriptHost
. Так что import
не должен вызывать никаких ошибок, так как включена библиотека модулей ES6.
Я бы попытался явно предложить библиотеку компилятору через "lib"
опция компилятора.
Для меня работало следующее:
{
"compilerOptions": {
"lib": [
"dom",
"es7" // or es2016, es2017, es2018 ...
],
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"esModuleInterop": true,
"removeComments": true,
"noImplicitAny": false,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": [ "./*" ],
"src/*": ["./src/*"]
},
"types": ["node", "@wdio/sync","jest"]
},
!Примечание: Другие версии библиотеки включают: 'ES3'
(По умолчанию), 'ES5'
, 'ES2015'
, 'ES2016'
, 'ES2017'
, 'ES2018'
или 'ESNEXT'
.
Я заработал, скомпилировав файлы Typescript в файлы Javascript, а затем указав расположение файлов Javascript в огурцеOpts => require
Привет! Вы получаете эту ошибку из-за оператора ES6
import
. Похоже, компилятор не одобряет включенную версию библиотеки. Я попытаюсь составить ответ, но я также был бы признателен, если бы вы обновили ответ соответствующими зависимостямиpackage.json
(ts-node
, всеми@types
и т. д.).