اشکالزدایی - چگونه تستهای Nightwatch را در VS Code اشکالزدایی کنیم
من دارم سعی میکنم تستهای e2e Nightwatch را با استفاده از VS Code اشکالزدایی کنم. من تستهایم را با تایپاسکریپت مینویسم. این تنها زمانی کار میکند که یک نقطه توقف در فایل js قرار دهم، بعد از آن به فایل ts میرود و میتوانم از آنجا اشکالزدایی کنم. اگر آن را در فایل ts تست خود قرار دهم - هیچوقت متوقف نمیشود و نوشته میشود «Breakpoint ignored because generated code not found». فایلهای منبع من با استفاده از کامپایلر ts به پوشه /dist/dev/specs/e2e/nightwatch/src کامپایل میشوند. کد از launch.json
"name": "Launch e2e Tests on chrome",
"type": "node",
"console": "integratedTerminal",
"program": "${workspaceRoot}/dist/dev/specs/e2e/nightwatch/nightwatch.js",
"stopOnEntry": false,.
"args": ["-env default,-f DatabaseChecks.js"],
"cwd": "${workspaceRoot}",
"runtimeExecutable": null,.
"runtimeArgs": ["--nolazy"],
"env": {
"NODE_ENV": "development"
},
"sourceMaps": true,
"outFiles": ["${workspaceRoot}/dist/dev/specs/e2e/nightwatch/src"],
"request": "launch"
شاید کسی مشکل مشابهی داشته باشد؟ هر کمکی قدردانی خواهد شد.
پاسخ شماره ۱
در مورد من، مورد زیر به خوبی کار میکند.
در اینجا ساختار پروژه آمده است. در ادامه فایل launch.json من است.
{
// Use IntelliSense to learn about possible Node.js debug attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Nightwatch",
"program": "${workspaceRoot}/node_modules/nightwatch/bin/runner.js",
"stopOnEntry": false,
"args": [
"--test",
"tests/functionality_e2e_test.js"
],
"runtimeExecutable": null,
"sourceMaps": false
},
{
"type": "node",
"request": "attach",
"name": "Attach to Process",
"port": 5858
}
]
}
کد بالا حداقل نیاز برای اشکالزدایی پروژه Nightwatch js در آخرین نسخه Visual Studio Code 1.21.1 است. من از Node.js نسخه 6.11.2 استفاده میکنم. بنابراین پروتکل اشکالزدایی قدیمی است.
متشکرم استک اورفلو.
پاسخ شماره ۲
یکی از چیزهایی که معمولاً در مواقعی که باید برنامههای Node.js سمت سرور را دیباگ کنم به من کمک میکند، استفاده از gulp-sourcemaps است و در آن با مسیرهای تولید شده منابع بازی کردن (مقدار ویژگی "sources" در فایلهای js.map خود را بررسی کنید) با تبدیل آنها به مسیرهای مطلق و مطابقت کامل با مکان فایلهای ts شما:
به عنوان مثال:
gulp.task('build', () =>
{
var tsProject = ts.createProject('tsconfig.json', {
typescript: require('typescript')
});
var tsResult = tsProject.src()
.pipe(sourcemaps.init())
.pipe(tsProject());
//Write compiled js
return tsResult.js.pipe(sourcemaps.write(
".",
{
includeContent: false,
mapSources: function(sourcePath)
{
//Play around here - converting your relative paths to absolute ones that match location of ts file perfectly
return sourcePath.replace('../../../', __dirname + '/');
}
})).pipe(gulp.dest(TEMP_TARGET_FOLDER));
});
اگرچه کمی هک مانند است، اما برای من همیشه جواب میدهد و راهاندازی آن کاملاً ساده است.
