在 VSCode 中调试 Protractor-Cucumber 测试
Debug Protractor-Cucumber tests in VSCode
我正在使用 Angular 9,Node v14 和 e2e 测试,使用 Cucumber、Protractor 和 protractor-cucumber-framework。
protractor.conf.js
exports.config = {
// For configuring timeouts see https://www.protractortest.org/#/timeouts
allScriptsTimeout: 31000,
getPageTimeout: 30000,
capabilities: {
'browserName': 'chrome',
'loggingPrefs': {
// 'driver': 'ALL',
// 'server': 'ALL',
'browser': 'ALL'
},
},
directConnect: true,
baseUrl: 'http://localhost:7774/',
framework: 'custom',
// register Cucumber framework so that we can compile .feature files
frameworkPath: require.resolve('protractor-cucumber-framework'),
async onPrepare() {
console.log("Register TypeScript compiler for tests");
require('ts-node').register({
project: require('path').join(__dirname, './tsconfig.e2e.json')
});
console.log("Setting waitForAngularEnabled to false");
browser.waitForAngularEnabled(false);
},
// require feature files
specs: [
'./features/**/*.feature'
],
cucumberOpts: {
// For configuration see https://github.com/cucumber/cucumber-js/blob/master/docs/cli.md
require: [
'./pages/**/*.page.ts',
'./steps/**/*.step.ts',
'./support/**/*.ts'
],
tags: "@SystemTest"
}
};
tsconfig.e2e.json
...
"compilerOptions": {
"outDir": "../dist/out-tsc/e2e",
"module": "commonjs",
"sourceMaps": true,
"target": "es6",
"types": [
"chai",
"chai-as-promise",
"node"
]
}
...
launch.json
{
"name": "npm run e2e",
"type": "pwa-node",
"request": "launch",
"cwd": "${workspaceFolder}",
"runtimeExecutable": "npm",
"runtimeArgs": ["run-script", "e2e"],
"protocol": "inspector",
"sourceMaps": true
},
package.json
"e2e": "protractor e2e/protractor.conf.js",
我可以在 VSCode 中启动调试器,但问题是每个断点都是未绑定的断点。
我也尝试在 tsconfig."inlineSourceMap": true
中添加 e2e.json 我也尝试在 launch.json
中添加
"resolveSourceMapLocations": [
"${workspaceFolder}/e2e/**",
"!**/node_modules/**"
]
问题似乎是 ts-node 在内存中生成源映射(这就是我尝试 inlineSourceMap
的原因)。有什么办法不使用tsc先编译.ts文件和source maps,然后使用.js文件,而是仍然使用ts-node。
我终于成功了。问题是 ts-node 编译到内存中并且 VSCode 不知道源映射。
所以我首先用 sourcemaps 编译了所有东西(在一个 prealunch 任务中),然后在调试模式下启动了这个过程。
而且 type: pwa-node
好像不行,你应该用 type: node
代替。
我正在使用 Angular 9,Node v14 和 e2e 测试,使用 Cucumber、Protractor 和 protractor-cucumber-framework。
protractor.conf.js
exports.config = {
// For configuring timeouts see https://www.protractortest.org/#/timeouts
allScriptsTimeout: 31000,
getPageTimeout: 30000,
capabilities: {
'browserName': 'chrome',
'loggingPrefs': {
// 'driver': 'ALL',
// 'server': 'ALL',
'browser': 'ALL'
},
},
directConnect: true,
baseUrl: 'http://localhost:7774/',
framework: 'custom',
// register Cucumber framework so that we can compile .feature files
frameworkPath: require.resolve('protractor-cucumber-framework'),
async onPrepare() {
console.log("Register TypeScript compiler for tests");
require('ts-node').register({
project: require('path').join(__dirname, './tsconfig.e2e.json')
});
console.log("Setting waitForAngularEnabled to false");
browser.waitForAngularEnabled(false);
},
// require feature files
specs: [
'./features/**/*.feature'
],
cucumberOpts: {
// For configuration see https://github.com/cucumber/cucumber-js/blob/master/docs/cli.md
require: [
'./pages/**/*.page.ts',
'./steps/**/*.step.ts',
'./support/**/*.ts'
],
tags: "@SystemTest"
}
};
tsconfig.e2e.json
...
"compilerOptions": {
"outDir": "../dist/out-tsc/e2e",
"module": "commonjs",
"sourceMaps": true,
"target": "es6",
"types": [
"chai",
"chai-as-promise",
"node"
]
}
...
launch.json
{
"name": "npm run e2e",
"type": "pwa-node",
"request": "launch",
"cwd": "${workspaceFolder}",
"runtimeExecutable": "npm",
"runtimeArgs": ["run-script", "e2e"],
"protocol": "inspector",
"sourceMaps": true
},
package.json
"e2e": "protractor e2e/protractor.conf.js",
我可以在 VSCode 中启动调试器,但问题是每个断点都是未绑定的断点。
我也尝试在 tsconfig."inlineSourceMap": true
中添加 e2e.json 我也尝试在 launch.json
"resolveSourceMapLocations": [
"${workspaceFolder}/e2e/**",
"!**/node_modules/**"
]
问题似乎是 ts-node 在内存中生成源映射(这就是我尝试 inlineSourceMap
的原因)。有什么办法不使用tsc先编译.ts文件和source maps,然后使用.js文件,而是仍然使用ts-node。
我终于成功了。问题是 ts-node 编译到内存中并且 VSCode 不知道源映射。
所以我首先用 sourcemaps 编译了所有东西(在一个 prealunch 任务中),然后在调试模式下启动了这个过程。
而且 type: pwa-node
好像不行,你应该用 type: node
代替。