Можно ли настроить wdio для использования разных файлов tsconfig? - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь настроить 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.

Любопытно, что, изменив модуль, вы можете подумать, что он собирает тестовую конфигурацию но почему он не загружает требуемые для теста типы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...