Gỡ lỗi
Gỡ lỗi khó khăn hơn đáng kể khi nhiều tiến trình chạy hàng chục bài kiểm tra trên nhiều trình duyệt.
Trước tiên, việc giới hạn song song bằng cách đặt maxInstances
thành 1
, và chỉ nhắm vào các đặc tả và trình duyệt cần được gỡ lỗi là rất hữu ích.
Trong wdio.conf
:
export const config = {
// ...
maxInstances: 1,
specs: [
'**/myspec.spec.js'
],
capabilities: [{
browserName: 'firefox'
}],
// ...
}
Lệnh Debug
Trong nhiều trường hợp, bạn có thể sử dụng browser.debug()
để tạm dừng bài kiểm tra và kiểm tra trình duyệt.
Giao diện dòng lệnh của bạn cũng sẽ chuyển sang chế độ REPL. Chế độ này cho phép bạn thao tác với các lệnh và phần tử trên trang. Trong chế độ REPL, bạn có thể truy cập đối tượng browser
—hoặc các hàm $
và $$
—giống như trong các bài kiểm tra của bạn.
Khi sử dụng browser.debug()
, bạn có thể cần tăng thời gian chờ của trình chạy kiểm tra để tránh trường hợp trình chạy làm thất bại bài kiểm tra vì mất quá nhiều thời gian. Ví dụ:
Trong wdio.conf
:
jasmineOpts: {
defaultTimeoutInterval: (24 * 60 * 60 * 1000)
}
Xem timeouts để biết thêm thông tin về cách thực hiện điều này khi sử dụng các framework khác.
Để tiếp tục các bài kiểm tra sau khi gỡ lỗi, trong shell sử dụng phím tắt ^C
hoặc lệnh .exit
.
Cấu hình động
Lưu ý rằng wdio.conf.js
có thể chứa Javascript. Vì bạn có thể không muốn thay đổi vĩnh viễn giá trị thời gian chờ thành 1 ngày, nên thường hữu ích khi thay đổi các cài đặt này từ dòng lệnh bằng cách sử dụng biến môi trường.
Sử dụng kỹ thuật này, bạn có thể thay đổi cấu hình một cách linh hoạt:
const debug = process.env.DEBUG
const defaultCapabilities = ...
const defaultTimeoutInterval = ...
const defaultSpecs = ...
export const config = {
// ...
maxInstances: debug ? 1 : 100,
capabilities: debug ? [{ browserName: 'chrome' }] : defaultCapabilities,
execArgv: debug ? ['--inspect'] : [],
jasmineOpts: {
defaultTimeoutInterval: debug ? (24 * 60 * 60 * 1000) : defaultTimeoutInterval
}
// ...
}
Sau đó, bạn có thể thêm cờ debug
vào trước lệnh wdio
:
$ DEBUG=true npx wdio wdio.conf.js --spec ./tests/e2e/myspec.test.js
...và gỡ lỗi tệp đặc tả của bạn với DevTools!
Gỡ lỗi với Visual Studio Code (VSCode)
Nếu bạn muốn gỡ lỗi các bài kiểm tra của mình với các điểm dừng trong VSCode phiên bản mới nhất, bạn có hai tùy chọn để bắt đầu trình gỡ lỗi, trong đó phương pháp 1 là dễ dàng nhất:
- tự động gắn trình gỡ lỗi
- gắn trình gỡ lỗi bằng tệp cấu hình
VSCode Toggle Auto Attach
Bạn có thể tự động gắn trình gỡ lỗi bằng cách làm theo các bước sau trong VSCode:
- Nhấn CMD + Shift + P (Linux và Macos) hoặc CTRL + Shift + P (Windows)
- Nhập "attach" vào trường đầu vào
- Chọn "Debug: Toggle Auto Attach"
- Chọn "Only With Flag"
Vậy là xong! Bây giờ khi bạn chạy các bài kiểm tra (nhớ rằng bạn sẽ cần đặt cờ --inspect trong cấu hình như đã hướng dẫn trước đó), nó sẽ tự động khởi động trình gỡ lỗi và dừng lại tại điểm dừng đầu tiên mà nó gặp phải.
Tệp cấu hình VSCode
Có thể chạy tất cả hoặc chọn (các) tệp đặc tả. (Các) cấu hình gỡ lỗi phải được thêm vào .vscode/launch.json
, để gỡ lỗi đặc tả đã chọn, thêm cấu hình sau:
{
"name": "run select spec",
"type": "node",
"request": "launch",
"args": ["wdio.conf.js", "--spec", "${file}"],
"cwd": "${workspaceFolder}",
"autoAttachChildProcesses": true,
"program": "${workspaceRoot}/node_modules/@wdio/cli/bin/wdio.js",
"console": "integratedTerminal",
"skipFiles": [
"${workspaceFolder}/node_modules/**/*.js",
"${workspaceFolder}/lib/**/*.js",
"<node_internals>/**/*.js"
]
},
Để chạy tất cả các tệp đặc tả, hãy xóa "--spec", "${file}"
khỏi "args"
Ví dụ: .vscode/launch.json
Thông tin bổ sung: https://code.visualstudio.com/docs/nodejs/nodejs-debugging