1

我正在尝试使用光谱仪编写电子测试。

这是我的代码。

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)

我需要向现有的钩子添加任何功能吗?

4

2 回答 2

0

它似乎正在您的before all方法中发生。请注意,您的错误是1) Application launch "before all" hook:.

所以你的实际测试功能对我来说看起来不错。而且我beforeAll在此示例代码中看不到任何地方,所以我会说存在两个可能的问题之一。

  1. 有一种beforeAll方法在此代码示例中没有出现问题。
  2. 这里显示的before钩子返回一个非承诺对象。

在您的代码中,您使用 lambda 函数来完成之前的工作,但如果app.start()返回一个不是承诺的对象,那么这将是您的问题。尝试像这样重构它:

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

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

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

或者可能将您的app.start()函数转换为返回应该解决它的承诺。您可能需要添加async () => app.start(),但我认为对于这样的单个表达式没有必要。

于 2019-01-21T17:56:49.833 回答
0

您没有在 it 函数中使用“完成”作为回调。您也不必在描述回调中使用 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();
  });

});

希望能帮助到你!

于 2019-01-21T13:06:44.500 回答