Skip to content

Commit f587eed

Browse files
committed
moar part5e
1 parent 5f28a74 commit f587eed

File tree

3 files changed

+116
-3
lines changed

3 files changed

+116
-3
lines changed

src/content/5/fi/osa5e.md

Lines changed: 116 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -959,13 +959,126 @@ test('one of those can be made important', async ({ page }) => {
959959
})
960960
```
961961
962-
### Testien suoritus ja debuggaaminen
962+
### Testien kehittäminen ja debuggaaminen
963963
964-
Lokaattorien etsiminen
964+
Playwright tarjoaa muutamia melki hyviä testin kehittämistä ja debuggaamista auttavia työkaluja. [Dokumentaatiota](https://playwright.dev/docs/intro) kannattaa ehdottomasti selailla, eritysen tärkeitä ovat
965+
- [lokaattoreita](https://playwright.dev/docs/locators) kertova osa antaa hyviä vihjeitä testattavien elementtien etsimiseen
966+
- osa [actions](https://playwright.dev/docs/input) kertoo miten selaimen kanssa käytävää vuorovaikutusta on mahdollista simuloida testeissä
967+
- [assertioista](https://playwright.dev/docs/test-assertions) kertova osa demonstroi mitä erilaisia testauksessa käytettäviä ekspektaatioita Playwright tarjoaa
965968
966-
VSCode
969+
Tarkemmat detaljit löytyvät [API](https://playwright.dev/docs/api/class-playwright)-kuvauksesta, erityisen hyödyllisiä ovat testattavan sovelluksen selainikkunaa vastaavan komponentin [Page](https://playwright.dev/docs/api/class-page) kuvaus, sekä testeissä etsittyjä elementtejä vastaavan komponentin [Locator](https://playwright.dev/docs/api/class-locator)-kuvaus.
967970
971+
Jos/kun testit eivät mene läpi ja herää epäilys, että vika on koodin sijaan testeissä, kannattaa testejä suorittaa [debug](https://playwright.dev/docs/debug#run-in-debug-mode-1)-moodissa.
968972
973+
Seuraava komento suorittaa yksittäisen testin debug-moodissa:
974+
975+
```
976+
npm test -- --debug -g 'a new note can be created'
977+
```
978+
979+
Playwright-inspector näyttää testien etenemisen askel askeleelta. Yläreunan nuoli-piste-painike vie testejä yhden askeleen eteenpäin. Lokaattorien löytämät elementit sekä selaimen kanssa käyty interaktio visualisoituvat selaimeen:
980+
981+
![](../../images/5/play6.png)
982+
983+
Oletusarvoisesti debugatessa askelletaan testi läpi komento komennolta. Jos on kyse monimutkaisesta testistä, voi olla melko vaivalloista askeltaa testissä kiinnostavaan kohtaan asti. Liialta askellukselta voidaan välttyä lisäämällä juuri kiinnostavaa kohtaa ennen komento _await page.pause()_:
984+
985+
```js
986+
describe('Note app', () => {
987+
beforeEach(async ({ page, request }) => {
988+
// ...
989+
}
990+
991+
describe('when logged in', () => {
992+
beforeEach(async ({ page }) => {
993+
// ...
994+
})
995+
996+
describe('and several notes exists', () => {
997+
beforeEach(async ({ page }) => {
998+
await createNote(page, 'first note')
999+
await createNote(page, 'second note')
1000+
await createNote(page, 'third note')
1001+
})
1002+
1003+
test('one of those can be made important', async ({ page }) => {
1004+
await page.pause() // highlight-line
1005+
const secondNoteElement = await page.getByText('second note').locator('..')
1006+
await secondNoteElement.getByRole('button', { name: 'make not important' }).click()
1007+
await expect(secondNoteElement.getByText('make important')).toBeVisible()
1008+
})
1009+
})
1010+
})
1011+
})
1012+
```
1013+
1014+
Nyt testissä voidaan siirtyä kiinnostavaan kohtaan yhdellä askelella, painamalla inspectorissa vihreää nuolisymbolia.
1015+
1016+
Debuggausmoodin sijaan tai rinnalla voi testien suorittaminen UI-moodissa olla hyödyllistä.
1017+
1018+
```
1019+
npm run test -- --ui
1020+
```
1021+
1022+
Kun suoritamme testit, huomamme UI:ta tarkastelemalla mielenkiintoisen ilmiön:
1023+
1024+
![](../../images/5/play7.png)
1025+
1026+
Kyse on seuraavasta testistä:
1027+
1028+
```js
1029+
describe('and several notes exists', () => {
1030+
beforeEach(async ({ page }) => {
1031+
await createNote(page, 'first note')
1032+
await createNote(page, 'second note')
1033+
await createNote(page, 'third note')
1034+
})
1035+
1036+
test('one of those can be made important', async ({ page }) => {
1037+
const secondNoteElement = await page.getByText('second note').locator('..')
1038+
await secondNoteElement.getByRole('button', { name: 'make not important' }).click()
1039+
await expect(secondNoteElement.getByText('make important')).toBeVisible()
1040+
})
1041+
})
1042+
```
1043+
1044+
Testi menee kyllä läpi, mutta näyttää siltä, että selain ei renderöi kaikkia lohkossa _beforeEach_ luotuja muistiinpanoja. Mistä on kyse?
1045+
1046+
Syynä ongelmaan on se, että kun testi luo yhden muistiinpanon, se aloittaa seuraavan luomisen jo ennen kuin palvelin on vastannut, ja lisätty muistiinpano on renderöidään ruudulle. Tämä taas saattaa aiheuttaa sen, että jotain muistiinpanoja katoaa, sillä selain päivitetään palvelimen vastatessa perustuen siihen muistiinpanojen tilaan mikä kyseisen lisäysoperaation alussa oli.
1047+
1048+
Ongelma korjaantuu "hidastamalla" lisäysoperaatioita siten, että lisäyksen jälkeen odotetaan komennolla [waitFor](https://playwright.dev/docs/api/class-locator#locator-wait-for), että lisätty muistinpano ehditään renderöidä:
1049+
1050+
```js
1051+
const createNote = async (page, content) => {
1052+
await page.getByRole('button', { name: 'new note' }).click()
1053+
await page.getByRole('textbox').fill(content)
1054+
await page.getByRole('button', { name: 'save' }).click()
1055+
await page.getByText(content).waitFor() // hightlight-line
1056+
}
1057+
```
1058+
1059+
Lähes samaan tapaan kuin UI-moodi, toimii Playwrightin [Trace Viewer](https://playwright.dev/docs/trace-viewer-intro). Ideana siinä on, se että testeistä tallennetaan "visuaalinen jälki", jota voidaan tarkastella tarvittaessa testien suorituksen jälkeen. Trace tallennetaan suorittamalla testit seuraavasti:
1060+
1061+
```
1062+
npm run test -- --trace on
1063+
```
1064+
1065+
Tracen pääsee tarvittaessa katsomaan komennolla
1066+
1067+
```
1068+
npx playwright show-report
1069+
```
1070+
1071+
tai määrittelemällämme npm-skriptillä _npm run test:report_
1072+
1073+
Trace näyttää lähes samalta kuin testien suoritus UI-moodissa:
1074+
1075+
1076+
Locator
1077+
1078+
1079+
Testien nauhoitus
1080+
1081+
Komentorivin sijaan Playwrightiä voi käyttää myös [VS Code](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright)-pluginin kautta. Plugin tarjoaa monia käteviä ominaisuuksia, mm. breakpointien käytön testejä debugatessa.
9691082
9701083
Testien lopullinen versio on kokonaisuudessaan [GitHubissa](https://github.com/fullstack-hy2020/part2-notes-frontend/tree/part5-11), branchissa <i>part5-11</i>.
9711084

src/content/images/5/play6.png

597 KB
Loading

src/content/images/5/play7.png

280 KB
Loading

0 commit comments

Comments
 (0)