Асинхронный обратный вызов и тайм-аут не работает, как ожидалось - PullRequest
0 голосов
/ 04 марта 2019

Я не уверен, почему я получаю эту ошибку.Я вызываю функцию done() и определяю jasmine.DEFAULT_TIMEOUT_INTERVAL.Почему он выдает эту ошибку.

Тайм-аут - асинхронный обратный вызов не был вызван в течение времени ожидания, указанного в jasmine.DEFAULT_TIMEOUT_INTERVAL.

describe('Puppeteer', () => {
    let originalTimeout;

    beforeEach(function () {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

  it('Logs in, redirects and does something', async (done) => {
    const browser = await puppeteer.launch({
      headless: true,
      args: [
        '--incognito'
      ]
    });
    const page = await browser.newPage();
    await page.goto('localhost:3000/login');
    ... // Login Credentials
    await page.waitForNavigation({ waitUntil: 'load' }); // redirects
    ... // perform some action on website
    expect(a < b)
      .toEqual(true);
    browser.close();
    done();
  });

    afterEach(function () {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
    });
});  

Это ничего не делает ни

describe('...', () => {
  it('...', async (done) => {
    ....
  }, 10000);
});

Написание этого способа работает, но почему?

describe('Puppeteer', () => {
  it('Logs in, redirects and does something', () => {
    (async () => {
      const browser = await puppeteer.launch({
        headless: true,
        args: [
          '--incognito'
        ]
      });
      ....
      expect(a < b)
        .toEqual(true);
      browser.close();
    })();
  });
});  

1 Ответ

0 голосов
/ 05 марта 2019
  • done используется для обратного вызова.
  • async используется для обещаний.

Посмотрите, как их пример не имеет двух одновременно.

enter image description here

done и async не будут работать одновременно.Удалите done, если вы используете async.

...