我正在尝试使用光谱仪编写电子测试。
这是我的代码。
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)
我需要向现有的挂钩添加任何功能吗?
答案 0 :(得分:0)
您没有在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();
});
});
希望有帮助!
答案 1 :(得分:0)
您的before all
方法中似乎正在发生这种情况。请注意,您的错误提示为1) Application launch "before all" hook:
。
所以您的实际测试功能对我来说还不错。而且在此示例代码中的任何地方都看不到beforeAll
,所以我会说存在两个可能的问题之一。
beforeAll
方法,该问题不在此代码示例中。before
钩子返回一个非承诺对象。在您的代码中,您正在使用lambda函数完成之前的工作,但是如果app.start()
返回的对象不是promise,那将是您的问题。尝试像这样重构它:
before(() => {
app.start()
})
如果您的app.start()
函数是异步的,则可能需要将完成的处理程序传递给它:
before((done) => {
app.start(done)
})
或者可能将您的app.start()
函数转换为返回可以解决它的promise。您可能需要添加async () => app.start()
,但是对于这样的单个表达式,我认为这不是必需的。