Skip to content

Commit e305d11

Browse files
committed
more fixes part5d
1 parent ad2334e commit e305d11

File tree

1 file changed

+56
-31
lines changed

1 file changed

+56
-31
lines changed

src/content/5/fi/osa5d.md

Lines changed: 56 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -638,14 +638,6 @@ Testien tämänhetkinen koodi on kokonaisuudessaan [GitHubissa](https://github.c
638638

639639
Tehdään nyt testi joka varmistaa, että kirjautumisyritys epäonnistuu jos salasana on väärä.
640640

641-
Playwright suorittaa oletusarvoisesti aina kaikki testit, ja testien määrän kasvaessa se alkaa olla aikaavievää. Uutta testiä kehitellessä tai rikkinäistä testiä debugatessa voidaan määritellä testi komennon <i>test</i> sijaan komennolla <i>test.only</i>, jolloin Playwright suorittaa ainoastaan sen testin. Kun testi on valmiina, voidaan <i>only</i> poistaa.
642-
643-
Toinen vaihtoehto suorittaa yksittäinen testi, on käyttää komentoriviparametria
644-
645-
```
646-
npm test -- -g "login fails with wrong password"
647-
```
648-
649641
Testin ensimmäinen versio näyttää seuraavalta:
650642

651643
```js
@@ -695,12 +687,12 @@ Voisimmekin tarkentaa testiä varmistamaan, että virheilmoitus tulostuu nimenom
695687
})
696688
```
697689
698-
Testi siis etsitään metodilla [page.locator](https://playwright.dev/docs/api/class-page#page-locator) CSS-luokan <i>error</i> sisältävän komponentin ja tallennetaan sen muuttujaan muuttujaan. Komponenttiin liittyvän teksstin oikeellisuus voidaan varmistaa ekspektaatiolla [toContainText](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-contain-text). Huomaa, että [luokan CSS-selektori](https://developer.mozilla.org/en-US/docs/Web/CSS/Class_selectors) alkaa pisteellä, eli luokan <i>error</i> selektori on <i>.error</i>.
690+
Testi siis etsii metodilla [page.locator](https://playwright.dev/docs/api/class-page#page-locator) CSS-luokan <i>error</i> sisältävän komponentin ja tallennetaan sen muuttujaan. Komponenttiin liittyvän teksstin oikeellisuus voidaan varmistaa ekspektaatiolla [toContainText](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-contain-text). Huomaa, että [luokan CSS-selektori](https://developer.mozilla.org/en-US/docs/Web/CSS/Class_selectors) alkaa pisteellä, eli luokan <i>error</i> selektori on <i>.error</i>.
699691
700-
Ekspekaatiolla [toHaveCSS](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-css) on mahdollista testata tyylejä. Voimme esim. varmistaa, että virheilmoituksen väri on punainen, ja että sen ympärillä on border:
692+
Ekspekaatiolla [toHaveCSS](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-css) on mahdollista testata sovelluksen CSS-tyylejä. Voimme esim. varmistaa, että virheilmoituksen väri on punainen, ja että sen ympärillä on border:
701693
702694
```js
703-
test('login fails with wrong password', async ({ page }) =>{
695+
test('login fails with wrong password', async ({ page }) => {
704696
// ...
705697

706698
const errorDiv = await page.locator('.error')
@@ -712,8 +704,7 @@ Ekspekaatiolla [toHaveCSS](https://playwright.dev/docs/api/class-locatorassertio
712704
713705
Värit on määriteltävä Playwrightille [rgb](https://rgbcolorcode.com/color/red)-koodeina.
714706
715-
716-
Viimeistellään testi vielä siten, että se varmistaa myös, että sovellus ei renderöi onnistunutta kirjautumista kuvaavaa tekstiä <i>'Matti Luukkainen logged in'</i>:
707+
Viimeistellään testi vielä siten, että se varmistaa myös, että sovellus **ei renderöi** onnistunutta kirjautumista kuvaavaa tekstiä <i>'Matti Luukkainen logged in'</i>:
717708
718709
```js
719710
test('login fails with wrong password', async ({ page }) =>{
@@ -731,6 +722,34 @@ test('login fails with wrong password', async ({ page }) =>{
731722
})
732723
```
733724
725+
### Testien suorittaminen yksitellen
726+
727+
Playwright suorittaa oletusarvoisesti aina kaikki testit, ja testien määrän kasvaessa se alkaa olla aikaavievää. Uutta testiä kehitellessä tai rikkinäistä testiä debugatessa voidaan määritellä testi komennon <i>test</i> sijaan komennolla <i>test.only</i>, jolloin Playwright suorittaa ainoastaan sen testin:
728+
729+
```js
730+
describre(() => {
731+
// this is the only test executed!
732+
test.only('login fails with wrong password', async ({ page }) => { // highlight-line
733+
// ...
734+
})
735+
736+
// this test is skipped...
737+
test('user can login with correct credentials', async ({ page }) => {
738+
// ...
739+
}
740+
741+
// ...
742+
})
743+
```
744+
745+
Kun testi on valmiina, voidaan <i>only</i> poistaa.
746+
747+
Toinen vaihtoehto suorittaa yksittäinen testi, on käyttää komentoriviparametria:
748+
749+
```
750+
npm test -- -g "login fails with wrong password"
751+
```
752+
734753
### Testien apufunktiot
735754
736755
Sovelluksemme testit näyttävät tällä hetkellä seuraavalta:
@@ -741,7 +760,7 @@ const { test, describe, expect, beforeEach } = require('@playwright/test')
741760
describe('Note app', () => {
742761
// ...
743762

744-
test('user can log in', async ({ page }) => {
763+
test('user can login with correct credentials', async ({ page }) => {
745764
await page.getByRole('button', { name: 'log in' }).click()
746765
await page.getByTestId('username').fill('mluukkai')
747766
await page.getByTestId('password').fill('salainen')
@@ -771,9 +790,9 @@ describe('Note app', () => {
771790

772791
```
773792
774-
Ensin siis testataan kirjautumistoimintoa. Tämän jälkeen omassa describe-lohkossa on joukko testejä, jotka olettavat että käyttäjä on kirjaantuneena, kirjaantuminen hoidetaan alustuksen tekevän <i>beforeEach</i>-lohkon sisällä.
793+
Ensin siis testataan kirjautumistoimintoa. Tämän jälkeen omassa _describe_-lohkossa on joukko testejä, jotka olettavat että käyttäjä on kirjaantuneena, kirjaantuminen hoidetaan alustuksen tekevän _beforeEach_-lohkon sisällä.
775794
776-
Kuten aiemmin jo todettiin, jokainen testi suoritetaan alkutilasta, eli vaikka testi on koodissa alempana, se ei aloita samasta tilasta mihin ylempänä koodissa olevat testit ovat jääneet!
795+
Kuten aiemmin jo todettiin, jokainen testi suoritetaan alkutilasta (missä tietokanta tyhjennetään ja sinne luodaan yksi käyttäjä) alkaen, eli vaikka testi on koodissa alempana, se ei aloita samasta tilasta mihin ylempänä koodissa olevat testit ovat jääneet!
777796
778797
Myös testeissä kannattaa pyrkiä toisteettomaan koodiin. Eristetään kirjautumisen hoitava koodi apufunktioksi, joka sijoitetaan esim. tiedostoon _tests/helper.js_:
779798
@@ -791,6 +810,8 @@ export { loginWith }
791810
Testi yksinkertaistuu ja selkeytyy:
792811
793812
```js
813+
const { loginWith } = require('./helper')
814+
794815
describe('Note app', () => {
795816
test('user can log in', async ({ page }) => {
796817
await loginWith(page, 'mluukkai', 'salainen')
@@ -810,7 +831,9 @@ describe('Note app', () => {
810831
})
811832
```
812833
813-
Sama koskee oikeastaan myös uuden muistiinpanon luomista. Sitä varten on olemassa testi, joka luo muistiinpanon lomakkeen avulla. Myös muistiinpanon tärkeyden muuttamista testaavan testin <i>beforeEach</i>-alustuslohkossa luodaan muistiinpano lomakkeen avulla:
834+
Playwright tarjoaa myös [ratkaisun](https://playwright.dev/docs/auth) missä kirjaantuminen suoritetaan kertaalleen ennen testejä, ja jokainen testi aloittaa tilanteeasta missä sovellukseen ollaan jo kirjaantuneena. Jotta voisimme hyödyntää tätä tapaa, tulisi sovelluksen testidata alustaminen tehdä hienojakoisemmin kuin nyt. Nykyisessä ratkaisussahan tietokanta nollataan ennen jokaista testiä, ja tämän takia kirjaantuminen ennen testejä on mahdotonta. Jotta voisimme käyttää Plywrightin tarjoamaa ennen testejä tehtävää kirjautumista, tulisi käyttäjä alustaa vain kertaalleen ennen testejä. Pitäydymme yksinkertaisuuden vuoksi nykyisessä ratkaisussamme.
835+
836+
Vastaava toistuva koodi koskee oikeastaan myös uuden muistiinpanon luomista. Sitä varten on olemassa testi, joka luo muistiinpanon lomakkeen avulla. Myös muistiinpanon tärkeyden muuttamista testaavan testin <i>beforeEach</i>-alustuslohkossa luodaan muistiinpano lomakkeen avulla:
814837
815838
```js
816839
describe('Note app', function() {
@@ -839,9 +862,7 @@ describe('Note app', function() {
839862
})
840863
```
841864
842-
Playwright tarjoaa myös [ratkaisun](https://playwright.dev/docs/auth) missä kirjaantuminen suoritetaan kertaalleen ennen testejä, ja jokainen testi aloittaa tilanteeasta missä sovellukseen ollaan jo kirjaantuneena. Jotta voisimme hyödyntää tätä tapaa, tulisi sovelluksen testidata alustaminen tehdä hienojakoisemmin kuin nyt. Nykyisessä ratkaisussahan tietokanta nollataan ennen jokaista testiä, ja tämän takia kirjaantuminen ennen testejä on mahdotonta. Jotta voisimme käyttää Plywrightin tarjoamaa ennen testejä tehtävää kirjautumista, tulisi käyttäjä alustaa vain kertaalleen ennen testejä. Pitäydymme yksinkertaisuuden vuoksi nykyisessä ratkaisussamme.
843-
844-
Eristetään myös muistiinpanon lisääminen omaksi komennoksi, joka tekee lisäämisen suoraan HTTP POST:lla. Tiedosto _tests/helper.js_ laajenee seuraavasti:
865+
Eristetään myös muistiinpanon lisääminen omaksi apufunktioksi. Tiedosto _tests/helper.js_ laajenee seuraavasti:
845866
846867
```js
847868
const loginWith = async (page, username, password) => {
@@ -862,26 +883,30 @@ const createNote = async (page, content) => {
862883
export { loginWith, createNote }
863884
```
864885
865-
Komennon suoritus edellyttää, että käyttäjä on kirjaantunut sovellukseen API:n kautta.
866-
867-
Testin alustuslohko yksinkertaistuu seuraavasti:
886+
Testi yksinkertaistuu seuraavasti:
868887
869888
```js
870889
describe('Note app', () => {
871890
// ...
872891

873-
describe('when logged in', () => {
874-
test('a new note can be created', ({ page }) => {
875-
// ...
892+
describe('when logged in', () => {
893+
beforeEach(async ({ page }) => {
894+
await loginWith(page, 'mluukkai', 'salainen')
895+
})
896+
897+
test('a new note can be created', async ({ page }) => {
898+
await createNote(page, 'a note created by playwright', true)
899+
await expect(await page.getByText('a note created by playwright')).toBeVisible()
876900
})
877901

878902
describe('and a note exists', () => {
879903
beforeEach(async ({ page }) => {
880904
await createNote(page, 'another note by playwright', true)
881905
})
882-
883-
test('it can be made important', ({ page }) => {
884-
// ...
906+
907+
test('importance can be changed', async ({ page }) => {
908+
await page.getByRole('button', { name: 'make not important' }).click()
909+
await expect(await page.getByText('make important')).toBeVisible()
885910
})
886911
})
887912
})
@@ -906,7 +931,7 @@ export default defineConfig({
906931
907932
Voimme siis korvata testeissä kaikki osoitteet _http://localhost:3001/api/..._ osoitteella _http://localhost:5173/api/..._
908933
909-
Määrittellään sovellukselle <i>baseUrl</i>:in testien konfiguraatiotiedostoon <i>playwright.config.js</i>:
934+
Voimme nyt määrittellä sovellukselle _baseUrl_:in testien konfiguraatiotiedostoon <i>playwright.config.js</i>:
910935
911936
```js
912937
module.exports = defineConfig({
@@ -932,7 +957,7 @@ await page.goto('/')
932957
await page.post('/api/tests/reset')
933958
```
934959
935-
Testit ja frontendin koodi on kokonaisuudessaan [GitHubissa](https://github.com/fullstack-hy2020/part2-notes-frontend/tree/part5-10), branchissa <i>part5-10</i>.
960+
Testien tämänhetkinen koodi on [GitHubissa](https://github.com/fullstack-hy2020/notes-e2e/tree/part5-2), branchissa <i>part5-2</i>.
936961
937962
### Muistiinpanon tärkeyden muutos
938963

0 commit comments

Comments
 (0)