1

目标:使用 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 真的准备好了?

4

0 回答 0