未找到 e2e tsconfig 类型:错误 TS2304:找不到名称“浏览器”

Jur*_*ur_ 5 typescript tsconfig webdriver-io angular

我正在尝试使用简单的 webdrioverio e2e 测试设置一个示例 Angular 项目,但在我的 e2e 测试中遇到了一些编译错误。

\n

tsconfig 设置

\n

该项目主要使用以下文件进行设置:

\n
e2e / test / [e2e test code]\ne2e / tsconfig.e2e.json\ne2e / wdio.conf.js\npackage.json\ntsconfig.json\n
Run Code Online (Sandbox Code Playgroud)\n

我的基地tsconfig.json看起来像:

\n
{\n  "compileOnSave": false,\n  "compilerOptions": {\n    "baseUrl": "./",\n    "outDir": "./dist/out-tsc",\n    "sourceMap": true,\n    "declaration": false,\n    "downlevelIteration": true,\n    "experimentalDecorators": true,\n    "module": "esnext",\n    "moduleResolution": "node",\n    "importHelpers": true,\n    "target": "es2018",\n    "lib": [\n      "es2018",\n      "dom"\n    ]\n  },\n  "angularCompilerOptions": {\n    "fullTemplateTypeCheck": true,\n    "strictInjectionParameters": true\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

看起来tsconfig.e2e.json像:

\n
{\n  "extends": "../tsconfig.json",\n  "compilerOptions": {\n    "module": "CommonJS",\n    "outDir": "../dist/out-tsc/e2e",\n    "baseUrl": "./",\n    "target": "es2018",\n    "types": [\n      "node",\n      "@wdio/sync",\n      "@wdio/jasmine-framework",\n      "jasminewd2"\n    ]\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n

从我的 IDE 终端运行tsc或尝试执行脚本e2epackage.json导致以下错误:

\n
[0-0] 2021-02-09T15:47:53.019Z WARN @wdio/jasmine-framework: Unable to load spec files quite likely because they rely on `browser` object that is not fu\nlly initialised.\n`browser` object has only `capabilities` and some flags like `isMobile`.\nHelper files that use other `browser` commands have to be moved to `before` hook.\nSpec file(s): C:\\dev\\source\\rme\\angular-wdio6-builder-demo\\e2e\\test\\specs\\basic.spec.ts\n Error:  TSError: \xe2\xa8\xaf Unable to compile TypeScript:\ne2e/test/specs/basic.spec.ts(7,5): error TS2304: Cannot find name \'browser\'.\ne2e/test/specs/basic.spec.ts(8,19): error TS2304: Cannot find name \'browser\'.\ne2e/test/specs/basic.spec.ts(13,5): error TS2304: Cannot find name \'browser\'.\ne2e/test/specs/basic.spec.ts(14,21): error TS2581: Cannot find name \'$\'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery`.\n
Run Code Online (Sandbox Code Playgroud)\n

我的预感和 MRE

\n我有一种感觉,当我编译 e2e 代码时,`tsconfig.e2e.json` 内容会被忽略,因为它不会拾取类型引用 `@ 中指定的 `browser` 对象。 wdio/sync`。\n

可以在 GitLab 上找到基于此问题的完整 MRE 。它包含一个 CI 脚本,该脚本显示了我在本地运行时遇到的错误输出

\n

另请注意,我的 intellij IDEbrowser很好地引用了 -object,并且按住 Ctrl 键单击它会显示浏览器 var 位于文件中node_modules\\@wdio\\sync\\webdriverio.d.ts

\n

编辑/附加: \n在之前执行的脚本package.json中,它调用:pree2ee2ee2e/e2e.cmd

\n
set TS_NODE_PROJECT=e2e/tsconfig.e2e.json\n
Run Code Online (Sandbox Code Playgroud)\n

edit2:wdio.conf.js配置文件:

\n

包括(生成的)注释的完整文件也在最小可重现示例中:e2e/wdio.conf.js

\n
exports.config = {\n    runner: \'local\',\n    path: \'/\',\n    specs: [\n      `${__dirname}/test/specs/**/*.ts`\n    ],\n    exclude: [\n    ],\n    maxInstances: 10,\n    capabilities: [{\n        maxInstances: 5,\n        browserName: \'chrome\',\n    }],\n    logLevel: \'warn\',\n    bail: 0,\n    baseUrl: `http://localhost:${process.env.PORT || 4200}`,\n    waitforTimeout: 10000,\n    connectionRetryTimeout: 90000,\n    connectionRetryCount: 3,\n    services: [\'chromedriver\'],\n    framework: \'jasmine\',\n    jasmineNodeOpts: {\n        requires: [\'ts-node/register\'],\n        defaultTimeoutInterval: 60000,\n        expectationResultHandler: function(passed, assertion) {\n            // do something\n        }\n    },\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Sch*_*ini 2

您可以在 wdio.conf 文件中运行 tsnode。另外,在您的 jasmine 选项中,您应该需要 tsconfig-paths :

const tsNode = require('ts-node');
tsNode.register({
  files: true,
  project: './e2e/tsconfig.e2e.json'
});

exports.config = {
....
    jasmineNodeOpts: {
        // Required for Typescript
        requires: ['tsconfig-paths/register'],
...
};
Run Code Online (Sandbox Code Playgroud)