Как мне очистить высмеянный ответ драматурга?

#javascript #jestjs #playwright

#javascript #jestjs #драматург

Вопрос:

В документации playwright вы можете смоделировать вызов API

Для меня это работает нормально, но у меня есть два теста, которые имеют разные фиктивные ответы в одном файле.

 
submitMock = (response) => page.route(/submit/, (route) =>
    route.fulfill({
      status: status || 200,
      body: JSON.stringify(response),
    }),
  );

/// my test code
describe('fill form', () => {
  beforeEach(async () => {
    jest.resetAllMocks(); // doesn't clear mock requests
    await setupAppMocks(); // some basic mocks
    await page.goto(
      `${localhost}/?foo=bar`,
    );
  });

  afterAll(async () => {
    await browser.close();
  });

  it('should test scenario 1', async () => {
    expect.hasAssertions();

    const responseMock = { test: 'test' };
    await submitMock(responseMock); // first mock created here

    await fillForm();
    await clickSubmit();

    await page.waitForSelector('[class*="CongratulationsText"]');

    const sectionText = await page.$eval(
      '[class*="CongratulationsText"]',
      (e) => e.textContent,
    );

    expect(sectionText).toBe(
      `Congratulations, expecting message for scenario 1`,
    );
  });

  it('should test scenario 2', async () => {
    expect.hasAssertions();

    const responseMock = { test: 'test 2' };
    await submitMock(responseMock); // second mock created here

    await fillForm();
    await clickSubmit();

    await page.waitForSelector('[class*="CongratulationsText"]');

    const sectionText = await page.$eval(
      '[class*="CongratulationsText"]',
      (e) => e.textContent,
    );

    // fails because first mock is still active
    expect(sectionText).toBe(
      `Congratulations, expecting message for scenario 2`,
    );
  });
});
 

Есть ли способ очистить предыдущий макет?

То, что я пробовал до сих пор, в основном добавляло еще один макет, но, похоже, он не отменяет предыдущий. Я предполагаю, что проблема заключается в том, что макеты для одного и того же шаблона не могут быть переопределены, но у меня нет простого способа исправить эту проблему.

Комментарии:

1. Вы можете отменить маршрутизацию своих маршрутов.

2. @hardkoded, не могли бы вы объяснить, как это сделать?

3. playwright.dev/docs/api/class-page#pageunrouteurl-обработчик нашел это, я думаю

4. Спасибо @hardkoded за предложение, оно сработало

Ответ №1:

Способ отменить блокировку вызова API — использовать page.unroute документацию здесь

 page.unroute(/submit/);