目标:使用 Spectron 对 VSCode 扩展执行真正的端到端测试。
例如,我安装了vim扩展。
我改编了 Spectron 的README中的用法示例,如下所示:
var Application = require('spectron').Application
var assert = require('assert')
describe('VSCode extension', function () {
this.timeout(10000)
beforeEach(function () {
this.app = new Application({
path: '.vscode-test/VSCode-linux-x64/bin/code',
args: [
'--extensionDevelopmentPath=' + process.cwd(),
'--locale=en',
process.cwd(),
],
requireName: 'nodeRequire',
})
return this.app.start()
})
afterEach(function () {
if (this.app && this.app.isRunning()) {
return this.app.stop()
}
})
it('suggest commands', function () {
return this.app.client
.waitUntilWindowLoaded()
//.pause(5000)
//.waitUntilTextExists('span', 'OPEN EDITORS', 10000)
.keys('F1')
.waitForVisible('.quick-open-widget:not(.hidden)')
.keys('vim')
.waitForVisible('.quick-open-entry*=Vim: Show Command Line')
})
})
问题:如何准确确定 VSCode 是否准备就绪。
打电话client.waitUntilWindowLoaded()
是不够的。在某些测试运行中,通过命令面板 (F1) 输入文本client.keys(...)
不会建议任何命令。
我不想在pause(...)
之后使用,waitUntilWindowLoaded()
因为它浪费了有用的时间,并且在系统负载过重时可能仍然不够用。
目前,我只是想出了.waitUntilTextExists('span', 'OPEN EDITORS', 10000)
大部分时间似乎都有效的方法。有时它会遇到超时。
是否有任何更可靠的(在 DOM 中)由 VSCode 设置并且可以由 Spectron 检查,表明 VSCode 真的准备好了?