electron 错误:超过30000 ms的逾时,对于异步测试和拦截,请确定已呼叫“done()”;如果返回承诺,请确保它解决了

ztyzrc3y  于 2022-12-08  发布在  Electron
关注(0)|答案(2)|浏览(551)

我正在试着用能谱子来写电子测试。
这是我的密码

describe ('Application launch', function(done) {
  this.timeout(30000);

  const app = new Application({
    path: electronBinary,
    args: [baseDir],
  });

  before(() => app.start());
  after(() => app.stop());

it('shows an initial window', async () =>  {
  await app.client.waitUntilWindowLoaded();
  const count = await app.client.getwindowcount();
  assert.equal(count,1);

  });

});

但是,当我运行npm test时,得到的错误是

1) Application launch "before all" hook:
     Error: Timeout of 30000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

  2) Application launch "after all" hook:
     Error: Application not running
      at Application.stop (node_modules\spectron\lib\application.js:58:48)
      at Context.after (test\spec.js:19:19)

我是否需要向现有的钩子添加任何函数?

wgx48brx

wgx48brx1#

它似乎发生在before all方法中。请注意,您的错误显示为1) Application launch "before all" hook:
在我看来,你的测试函数看起来很好,但是在这个例子代码中我没有看到beforeAll,所以我认为可能有两个问题。

  1. beforeAll方法在此代码示例之外的某个地方出现问题。
    1.这里显示的before挂接返回一个非承诺对象。
    在你的代码中,你使用了lambda函数来完成之前的工作,但是如果app.start()返回了一个不是承诺的对象,那么这就是你的问题了。试着像这样重构它:
before(() => {
  app.start()
})

如果您的app.start()函数是异步的,您可能需要将done处理程序传递给它:

before((done) => {
  app.start(done)
})

或者可能转换你的app.start()函数返回一个promise来解析它。你可能需要添加async () => await app.start(),但是我不认为这对于像这样的单个表达式是必要的。

hs1ihplo

hs1ihplo2#

你没有在it函数中使用“done”作为回调函数。你也不必在describe回调函数中使用done。另外,由于done()已经使你的代码异步,你不必使用async关键字。我的解决方案是:

describe ('Application launch', function() {
  this.timeout(30000);

  const app = new Application({
    path: electronBinary,
    args: [baseDir],
  });

  before(() => app.start());
  after(() => app.stop());

it('shows an initial window', (done) =>  {
  await app.client.waitUntilWindowLoaded();
  const count = app.client.getwindowcount();
  assert.equal(count,1);
  done();
  });

});

希望能有所帮助!

相关问题