Я пытаюсь настроить wdio для запуска нашего приложения React TypeScript. Проблема в том, что он работает только в том случае, если я изменяю сам файл tsconfig.json
, чтобы использовать требуемый types
, заменять module
на commonjs
и устанавливать isolatedModules
на false
:
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "commonjs",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react",
"types": ["node", "@wdio/sync", "@wdio/jasmine-framework"]
},
"include": [
"src"
]
}
Я хочу иметь возможность разбить это на отдельные tsconfig.json
файлы и использовать каждый по мере необходимости. Например, при запуске wdio
для наших интеграционных тестов я хочу, чтобы он использовал только файл tsconfig.test.json
, что-то вроде следующего:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"*": [ "./*" ],
"src/*": ["./src/*"]
},
"types": ["node", "@wdio/sync", "@wdio/jasmine-framework"]
},
"include": [
"./src/**/*.ts"
]
}
Я попытался установить jasmineNodeOpts
в wdio.conf.js
, чтобы получить tsconfig.test.json
, но это не сработало. Есть ли способ указать wdio
, либо с помощью флага, либо как-то еще, использовать определенный c tsconfig
файл?
EDIT
Добавлено wdio.conf.js
объект жасмина:
// Options to be passed to Jasmine.
jasmineNodeOpts: {
// TypeScript setup
requires: ['ts-node/register'],
// helpers: ["helper.js"],
// Jasmine default timeout
defaultTimeoutInterval: 60000,
//
// The Jasmine framework allows interception of each assertion in order to log the state of the application
// or website depending on the result. For example, it is pretty handy to take a screenshot every time
// an assertion fails.
expectationResultHandler: function(passed, assertion) {
// do something
}
},
РЕДАКТИРОВАТЬ 2
Следуя совету Джона, я установил cross-env
и изменил свой сценарий на этот:
"int": "cross-env TS_NODE_PROJECT=tsconfig.test.json wdio wdio.conf.js",
Но теперь это вызывает другую ошибку, особенно в моем фиктивном тесте:
import { openApp } from "./utils";
describe("Example.ts", () => {
beforeEach(() => {
openApp(browser, 'localhost');
});
it("should go to home page", () => {
expect(true).toBe(true);
});
});
И ошибка:
import { openApp } from "./utils";
^^^^^^
SyntaxError: Cannot use import statement outside a module
Если я изменю module
в * С 1046 * на commonjs
он проходит мимо этой ошибки и начинает жаловаться на типы:
Error: TSError: ⨯ Unable to compile TypeScript:
integration-tests/utils/index.ts(1,15): error TS7006: Parameter 'browser' implicitly has an 'any' type.
integration-tests/utils/index.ts(3,25): error TS2304: Cannot find name 'host'.
integration-tests/utils/index.ts(6,18): error TS7006: Parameter 'browser' implicitly has an 'any' type.
integration-tests/utils/index.ts(6,27): error TS7006: Parameter 'path' implicitly has an 'any' type.
Любопытно, что, изменив модуль, вы можете подумать, что он собирает тестовую конфигурацию но почему он не загружает требуемые для теста типы?