【问题标题】:React: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL反应:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调
【发布时间】:2018-07-30 17:06:20
【问题描述】:

在我的反应应用程序中,我正在尝试使用 puppeteer(开玩笑)编写 e2e 测试。

test.js

  const puppeteer = require("puppeteer");

    let browser;
    let page;

    describe("LoginPage", () => {
     beforeAll(async () => {
     browser = await puppeteer.launch({
     headless: false,
     slowMo: 250
    });
      page = await browser.newPage();
    });

   it("should display login page", async () => {
     await page.goto("http://localhost:3000/");
     const text = await page.evaluate(() => document.body.innerText);
     expect(text).toContain("Unity");
   });

    it("should show error message if email is not correct", async() => {
      await page.type("#email", "user");
      await page.type("#password", "pass");
      await page.click("button[type=submit]";

            const errorMessage = await page.evaluate(
            async () =>
             document.getElementsByClassName("ui negative message container")[0]
            );
          console.log("errorMessage", errorMessage);
       });
    });

但这种 e2e 测试无法使其发挥作用。

我收到一个错误:

Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您可以尝试通过将 jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; 添加到 setupTestFrameworkScriptFile.js 文件中来更改默认 jest 的超时时间(即 5 秒),您可以从 jest 配置中解决该文件:setupTestFrameworkScriptFile: require.resolve('./setupTestFrameworkScriptFile.js') - 另外,您可以看看铬,看看测试卡在哪里。它将帮助您找到根本原因

标签: reactjs asynchronous jestjs e2e-testing puppeteer


【解决方案1】:

使用 jest v23,我会尝试超时和一些小版本的代码(检查 cmets):

const puppeteer = require("puppeteer");

let browser;
let page;

describe("LoginPage", () => {
  beforeAll(async() => {
    browser = await puppeteer.launch({
      headless: false,
      slowMo: 250
    });
    page = await browser.newPage();
  }, 60e3); // timeout

  afterAll(() => browser.close()); // <-- don't leave browser hanging after the suite

  beforeEach(() => page.goto("http://localhost:3000")); // start with fresh page between test, don't keep implicit page state dependency

  it("should display login page", async() => {
    const text = await page.evaluate(() => document.body.innerText);
    expect(text).toContain("Unity");
    done(); //here
  });

  it("should show error message if email is not correct", async() => {
    await page.type("#email", "user");
    await page.type("#password", "pass");
    await page.click("button[type=submit]");

    try { // you need to try catch the error with async await
      await page.evaluate(
        () => document.getElementsByClassName("ui negative message container")[0] // no need for async
      );
    } catch (errorMessage) {
      console.log("errorMessage", errorMessage);
    }
    
    // you lack the expectation in the test
    // expect(true).toBe(true)
  });
});

【讨论】:

  • 感谢您的快速回复。但同样的错误。
  • @Khushi 我不知道这是开玩笑,据我记得最初的问题中没有说明。在这种情况下,请提供带有可验证数据的示例 repo,以便我可以在本地复制。
  • @Khushi 同时请重新检查代码,我更新了它
猜你喜欢
  • 2016-04-21
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 2014-05-01
  • 2019-11-04
相关资源
最近更新 更多