繁体   English   中英

“之前”中的异步 function 出错 - 使用 mocha 和 puppeteer 进行测试

[英]error with async function in 'before' - testing with mocha and puppeteer

我正在尝试在“之前”挂钩中启动铬浏览器。 运行代码时,我不断收到以下错误:

let browser;

describe('Login Tests', function(){

  let page;

  before(async ()=> {

    let launchOptions = {
        headless: false,
        executablePath: '/Applications/Chromium.app/Contents/MacOS/Chromium', 
        args: ['--start-maximized']
    };

    browser = await puppeteer.launch(launchOptions);
    page = await browser.newPage();

    await page.goto('http://localhost:8080');

    await page.waitForSelector('body div');
  })


  it('should bring up login modal when clicking Client Login', async function(){

    await page.waitForSelector('.navbar-start a[href$="#/login"]');

    await page.click('.navbar-start a[href$="#/login"]');

    let url = await page.url()

    assert.equal(url, 'http://localhost:8080/#/login');

  })

//....

})

错误:超过 2000 毫秒的超时。 对于异步测试和钩子,确保调用了“done()”; 如果返回 Promise,请确保它已解决。

当我将回调传递给异步 function 并在完成后返回它时,我仍然收到以下错误。 我在 after 钩子中也遇到了同样的错误。

有人可以帮我解决这个问题,卡在这个问题上太久了:(

问题是 mocha 每个钩子和测试的默认超时时间为 2000 毫秒。 您似乎没有在任何地方覆盖默认值。

要覆盖它,您有几个选项,一个是将此选项添加到.mocharc.json

{
    "timeout": 20000
}

这将为您提供 20 秒的“一切”超时 - 钩子、测试。

另一个如何设置不同超时的选项就在您的描述回调 function 中,通过调用timeout()方法:

describe('...', function () {
    this.timeout(20000);

    before(...);

    it(...);
});

这将再次为您提供 20 秒的超时。 这将影响 describe 块内的所有钩子和测试。 如果你想只为 before 钩子设置超时,你在 before 钩子中输入这个:

describe('...', function () {    

    before(function () {
        this.timeout(20000);
    });

    it(...);
});

设置不同超时的另一种方法可能是:

it('...', function () {
   // ...
}).timeout(20000);

这显然只会为这个测试设置一个超时。


如果我应该给出一个偏好,我会选择第一个选项,因为这是我期望的配置值。 钩子和测试是关于测试步骤的,而不是设置超时,所以我会避免在那里做。 如果我需要为一个特定的测试设置不同的超时时间,出于同样的可读性原因,我会选择我提到的最后一个选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM