Я хотел установить несколько тестов мокко для приложения TypeScript моего приложения Rails. Я добавил один глупый тест, чтобы начать. Но я продолжаю получать эту ошибку:
/home/bernhard/Programs/ruby/cube_trainer/jstests/utils/optional.spec.ts:1
import { some, none, mapOptional, forceValue, hasValue, checkNone } from '../../app/javascript/cube_trainer/app/utils/optional';
^^^^^^
SyntaxError: Cannot use import statement outside a module
...stacktrace...
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Я понял методом проб и ошибок, что строка "module": "es6"
в tsconfig. json, кажется, вызывает это. Если я изменяю его на "module": "commonjs"
, мой тест запускается и проходит. Тем не менее, мое приложение rails перестает работать, если я это делаю.
Я считаю, что эта проблема решена, если я выполню одно из следующих действий: * Сделайте так, чтобы мое приложение Rails работало с опцией "module": "commonjs"
. * Заставить мои тесты работать с "module": "es6"
* мне удается использовать другой tsconfig для mocha (но я рассмотрел бы эту опцию, только если бы я мог включить существующий tsconfig и изменить только эту одну опцию вместо копирования всего файла)
Кстати, у меня нет глубокого понимания всех этих параметров конфигурации, я просто копирую вставленные данные вместе, пока они не сработают. Так что если что-то в моих конфигах глупо, не стесняйтесь указывать на это. Единственное, что я сделал преднамеренно, это то, что я сделал TypeScript максимально строгим, насколько это было возможно, без ущерба для вещей, которые находятся вне моего контроля.
Важные файлы для справки
полное репо здесь: https://github.com/Lykos/cube_trainer README содержит инструкции по установке (если у вас уже настроены postgresql, пряжа и ruby, все должно быть просто)
tsconfig. json
{
"compilerOptions": {
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["dom", "es2017"],
"module": "es6",
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"*": ["node_modules/*", "app/javascript/*"]
},
"sourceMap": true,
"target": "es6",
"removeComments": false,
"strict": true,
"strictNullChecks": true,
"strictPropertyInitialization": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noUnusedLocals": true,
"noImplicitThis": true,
"noImplicitReturns": true
},
"exclude": [
"**/*.spec.ts",
"node_modules",
"vendor",
"public"
],
"compileOnSave": false
}
Обратите внимание, что мой tsconfig возник из того, что предоставляет Rails. Смотрите здесь:
https://github.com/rails/webpacker/blob/master/lib/install/examples/typescript/tsconfig.json
Я изменил "lib": ["es6", "dom"],
на "lib": ["dom", "es2017"],
, чтобы исправить проблему, я изменил цель на es6
и добавил несколько больше опций, чтобы сделать TypeScript более строгим.
Я не знаю, имеют ли вообще смысл эти опции, но я с трудом пытался заставить мое приложение работать с Rails и TS и без этих опций.
пакет. json
{
"name": "cube_trainer",
"private": true,
"dependencies": {
"@angular/animations": "^9.0.0",
"@angular/cdk": "^9.2.0",
"@angular/common": "^9.1.0",
"@angular/compiler": "^9.1.0",
"@angular/core": "^9.1.0",
"@angular/forms": "^9.1.0",
"@angular/material": "^9.2.0",
"@angular/platform-browser": "^9.1.0",
"@angular/platform-browser-dynamic": "^9.1.0",
"@angular/router": "^9.1.0",
"@rails/actioncable": "^6.0.0",
"@rails/activestorage": "^6.0.0",
"@rails/ujs": "^6.0.0",
"@rails/webpacker": "5.0.1",
"@rxweb/reactive-form-validators": "^1.9.9-beta4",
"angular-new-router": "angular/router",
"core-js": "^3.6.4",
"es6-shim": "^0.35.0",
"html-loader": "^1.0.0",
"http-methods-enum": "^0.1.1",
"jquery": "^3.4.1",
"material-design-icons": "^3.0.1",
"rails-ujs": "^5.2.4-2",
"reflect-metadata": "0.1.2",
"rxjs": "^6.5.3",
"snake-case-typescript": "^0.0.2",
"ts-loader": "^6.2.2",
"tslib": "^1.10.0",
"turbolinks": "^5.2.0",
"typescript": "^3.8.3",
"webpack": "^4.42.1",
"zone.js": "~0.10.2"
},
"author": "Bernhard F. Brodowsky",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/Lykos/cube_trainer.git"
},
"scripts": {
"test": "mocha -r ts-node/register jstests/**/*.spec.ts"
},
"version": "0.1.0",
"devDependencies": {
"@types/chai": "^4.2.11",
"@types/mocha": "^7.0.2",
"@types/node": "^12.12.31",
"chai": "^4.2.0",
"mocha": "^7.1.1",
"ts-node": "^8.9.0",
"webpack-dev-server": "^3.10.3"
}
}