#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/);