Драматург перед каждым для всех файлов спецификаций

#javascript #typescript #automated-tests #playwright #playwright-test

#язык JavaScript #машинописный текст #автоматизированные тесты #драматург #драматург-тест

Вопрос:

Я очень новичок в драматургии. Из-за моих наборов тестов мне нужно войти в свое приложение перед запуском каждого теста. Внутри одного файла спецификации, который очень прост, я могу просто позвонить test.beforeEach . Моя проблема в том, что мне нужно перед входом в систему перед каждым тестированием каждого файла спецификации.

 test.describe('Test', () =gt; {  //I need to make the code inside this beforeEach a exported   //function to call inside the before each of every spec file I have  test.beforeEach(async ({ page }) =gt; {  await page.goto('/login');  await page.click('text=Log in with Google account');  await page.fill('id=identifierId', LoginAutomationCredentials.USER);  await page.click('button[jsname="LgbsSe"]');  await page.fill('input[type="password"]', LoginAutomationCredentials.PASSWORD);  await page.click('button[jsname="LgbsSe"]');  const otp = authenticator.generateToken(LoginAutomationCredentials.TOKEN);  await page.fill('id=totpPin', otp);  await page.click('button[jsname="LgbsSe"]');  });   it('Some description', async ({ page }) =gt; {  await page.goto('/foo');  const dateFilter = await page.inputValue('input[placeholder="2011/03/02"]');  expect(dateFilter).toBe('2021/12/07');  }); });  

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

Как я могу избежать копирования всего кода beforeEach и вставки его во все мои файлы спецификаций? Как я могу сделать это функцией и вызывать ее всякий раз, когда захочу?

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

1. Почему бы вам просто не использовать глобальную настройку и повторно использовать аутентификацию? Вы также можете попробовать с помощью приспособлений, создать приспособление для входа и передать его вместо приспособления для страницы.

Ответ №1:

Используйте приспособления.

fixture.js:

 const base = require('@playwright/test') const newTest = base.test.extend({  login: async({page}, use) =gt; {  await login();  await use(page); //runs test here  //logic after test  } }) exports.newTest = newTest exports.expect = newTest.expect  

Затем в ваших тестах:

 const {newTest} = require('fixture.js') newTest('mytest', async ({login}) =gt; {  //test logic  login.goto(''); // using login here since I pass it as page in the fixture. })