Slide 1

Slide 1 text

ςετͱ஥ྑ͘͢ΔͨΊͷ Codeceptionͷ͸͡Ί͔ͨ PHP Conference Kansai 2017
 2017-07-15

Slide 2

Slide 2 text

ࣗݾ঺հ • ֯ాɹҰฏʢ͢Έͩɹ͍ͬ΃͍ʣ • ϑϦʔϥϯεΤϯδχΞ
 ˠ͓࢓ࣄઈࢍืूதʂ • CoderDojoຕํɹ୅ද

Slide 3

Slide 3 text

ࠓ೔ͷ໨ඪ • Codeceptionʹ͍ͭͯ஌ͬͯ΋Β͏ • CodeceptionͷςετͷྲྀΕΛ஌ͬͯ΋Β͏ • ʰCodeceptionͱҰॹʹ
 ɹςετͱ஥ྑ͘ͳΖ͏ʱͱࢥͬͯ΋Β͏

Slide 4

Slide 4 text

ΞδΣϯμ • Codeceptionͱ͸ • CodeceptionͰͷςετ࣮૷ • Codeception Tips

Slide 5

Slide 5 text

ςετॻ͍ͯ·͔͢ʁ

Slide 6

Slide 6 text

–ݪాɹ߁ੜ “ςετ͸઒ͷਫ࣭ௐࠪͩͱࢥͬͨΒ͍͍ Ͱ͢Α”

Slide 7

Slide 7 text

ւˡ

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

୯ମςετ ػೳςετ γεςϜɾडೖςετ

Slide 11

Slide 11 text

γεςϜςετ ػೳςετ ୯ମςετ

Slide 12

Slide 12 text

దࡐదॴͳςετΛ༻ҙ

Slide 13

Slide 13 text

దࡐదॴͷςετ͸… • ෆ۩߹ൃݟ͕༰қʹ • ૝ఆ֎ͷӨڹΛૣظൃݟ • ֎෦ύοέʔδΛ҆৺ͯ͠ߋ৽

Slide 14

Slide 14 text

Codeceptionͱ͸

Slide 15

Slide 15 text

1.Codeceptionͱ͸ ςεςΟϯάϑϨʔϜϫʔΫ
 (PHP੡)

Slide 16

Slide 16 text

PHPer Readableͳ
 ςεςΟϯάϑϨʔϜϫʔΫ 1.Codeceptionͱ͸

Slide 17

Slide 17 text

public function registerTest(AcceptanceTester $I) { $I->wantToTest('ొ࿥ςετ'); $I->canSee('͓໰͍߹Θͤ', '#title'); $I->fillField('#inquiry_name', '͢Έͩɹ͍ͬ΃͍'); $I->fillField('#inquiry_email', '[email protected]'); $I->fillField('#inquiry_question', '͓໰͍߹Θͤ಺༰'); $I->click('ૹ৴'); $I->canSee('͓໰͍߹Θͤ׬ྃ͠·ͨ͠ɻ', '#title'); $I->canSeeInDatabase('inquiry', [ 'name' => '͢Έͩɹ͍ͬ΃͍', 'email' => '[email protected]', 'question' => '͓໰͍߹Θͤ಺༰', ]); } 1.Codeceptionͱ͸

Slide 18

Slide 18 text

ςετͷ؅ཧָ͕ 1.Codeceptionͱ͸

Slide 19

Slide 19 text

1.Codeceptionͱ͸ 6OJU w ֤Ϋϥεɺϝιου w 1)16OJUΠϯετʔϧ
 ෆཁ 1)16OJUΛར༻ͨ͠
 ୯ମςετ 'VODUJPOBM w ػೳ୯Ґ w ϦΫΤετʹର͢Δ
 ݁ՌΛ֬ೝ w ֤'8ରԠ 8FCαʔόΛհ͞ͳ ͍'8ςετ "DDFQUBODF w ػೳ୯Ґ w ը໘্ͷಈ࡞֬ೝ w ϒϥ΢βґଘ ϒϥ΢βΛར༻ͨ͠ डೖςετ

Slide 20

Slide 20 text

Codeception͚ͩͰ
 ֤छςετΛҰׅ؅ཧɺ࣮ߦ 1.Codeceptionͱ͸

Slide 21

Slide 21 text

֤छϑϨʔϜϫʔΫαϙʔτ 1.Codeceptionͱ͸

Slide 22

Slide 22 text

1.Codeceptionͱ͸ And more…

Slide 23

Slide 23 text

ͦͷ΄͔ • REST APIςετՄ • ϨεϙϯγϒαΠτͷςετՄ • ֤छCIͱ࿈ܞՄ • Ωϟϓνϟऔಘ • ίʔυΧόϨοδऔಘ

Slide 24

Slide 24 text

ଟػೳɾ؆୯ 1.Codeceptionͱ͸ ςετͱ஥ྑ͘Ͱ͖ͦ͏ʂ

Slide 25

Slide 25 text

Conclusion • Codeception͸ςεςΟϯάϑϨʔϜϫʔΫ • PHPer͕ಡΈ΍͍͢ςετίʔυ • ֤छςετΛҰׅ؅ཧɺ࣮ߦՄೳ • ֤छϑϨʔϜϫʔΫରԠ • ͦͷଞॾʑ༻ҙ͞ΕͯΔͷͰ஥ྑ͘ͳΕͦ͏

Slide 26

Slide 26 text

CodeceptionͰͷςετ࣮૷

Slide 27

Slide 27 text

2.CodeceptionͰͷςετ࣮૷ 6OJU w ֤Ϋϥεɺϝιου w 1)16OJUΠϯετʔϧ
 ෆཁ 1)16OJUΛར༻ͨ͠
 ୯ମςετ 'VODUJPOBM w ػೳ୯Ґ w ϦΫΤετʹର͢Δ
 ݁ՌΛ֬ೝ w ֤'8ରԠ 8FCαʔόΛհ͞ͳ ͍'8ςετ "DDFQUBODF w ػೳ୯Ґ w ը໘্ͷಈ࡞֬ೝ w ϒϥ΢βґଘ ϒϥ΢βΛར༻ͨ͠ डೖςετ

Slide 28

Slide 28 text

Unit ϝιου࣮ߦ ϝιουΛ࣮ߦͯ͠
 ࣮ߦ݁Ռʹରͯ͠ςετɻ
 2.CodeceptionͰͷςετ࣮૷

Slide 29

Slide 29 text

Functional ϦΫΤετ FWʢϓϩάϥϜʣʹϦΫΤετΛ౉ͯ͠ɺ
 ࣮ߦ݁Ռʹରͯ͠ςετɻ
 = WebαʔόΛհ͞ͳ͍ 2.CodeceptionͰͷςετ࣮૷

Slide 30

Slide 30 text

Acceptance ϒϥ΢βΛ੍ޚͯ͠ɺ
 ϒϥ΢βදࣔ݁Ռʹରͯ͠ςετɻ
 㲈ਓͷखʹΑΔϒϥ΢βςετ 2.CodeceptionͰͷςετ࣮૷ ϦΫΤετ

Slide 31

Slide 31 text

࣮ߦ଎౓͸
 Unit > Functional > Acceptance 2.CodeceptionͰͷςετ࣮૷

Slide 32

Slide 32 text

શͯΛAcceptanceͰ ߦΘͳ͍ 2.CodeceptionͰͷςετ࣮૷

Slide 33

Slide 33 text

Acceptance = Ϧϋʔαϧ 2.CodeceptionͰͷςετ࣮૷

Slide 34

Slide 34 text

Πϯετʔϧ
 ؀ڥ४උ ࣮ߦ 2.CodeceptionͰͷςετ࣮૷

Slide 35

Slide 35 text

2.CodeceptionͰͷςετ࣮૷ $ composer require —dev codeception/codeception Πϯετʔϧ

Slide 36

Slide 36 text

2.CodeceptionͰͷςετ࣮૷ bootstrap - ؀ڥ࡞੒ build - ઃఆ൓ө $ vendor/bin/codecept bootstrap $ vendor/bin/codecept build

Slide 37

Slide 37 text

2.CodeceptionͰͷςετ࣮૷ $ vendor/bin/codecept run ςετ࣮ߦʢҰׅʣ

Slide 38

Slide 38 text

2.CodeceptionͰͷςετ࣮૷ $ vendor/bin/codecept run acceptance HogeCest:hogeTest ςετ࣮ߦʢҰ෦ʣ TVJUF ςετϑΝΠϧɺϝιου

Slide 39

Slide 39 text

2.CodeceptionͰͷςετ࣮૷ Acceptance (phpbrowser) Tests (2) --------------------------------------------------------------------- --------------------------------------------------------------------- --------------------- Testing acceptance (phpbrowser) ✔ InquiryCest: Test ొ࿥ςετ (1.30s) ✔ InquiryCest: Test ॏෳొ࿥ςετ (1.04s) --------------------------------------------------------------------- --------------------------------------------------------------------- ------------------------------------------------------- Time: 2.59 seconds, Memory: 17.00MB OK (2 tests, 5 assertions) ࣮ߦ݁ՌʢOKʣ

Slide 40

Slide 40 text

2.CodeceptionͰͷςετ࣮૷ Acceptance (phpbrowser) Tests (2) --------------------------------------------------------------------- --------------------------------------------------------------------- --------------------- Testing acceptance (phpbrowser) ✖ InquiryCest: Test ొ࿥ςετ ✔ InquiryCest: Test ొ࿥ςετ[F] (2.10s) ✔ InquiryCest: Test ॏෳొ࿥ςετ (1.30s) --------------------------------------------------------------------- --------------------------------------------------------------------- ------------------------------------------------------- Time: 3.7 seconds, Memory: 17.25MB There was 1 failure: ࣮ߦ݁ՌʢNGʣ

Slide 41

Slide 41 text

2.CodeceptionͰͷςετ࣮૷ --------- 1) InquiryCest: Test ొ࿥ςετ Test tests/acceptance/InquiryCest.php:registerTest Failed asserting that any element by '#title' on page /inquiry/ +

͓໰͍߹Θͤ

contains text 'a͓໰͍߹Θͤ' ࣮ߦ݁ՌʢNGʣ ͲͷςετͰΤϥʔʹͳ͔ͬͨग़ྗ

Slide 42

Slide 42 text

2.CodeceptionͰͷςετ࣮૷ ࣮ߦ݁ՌʢNGʣ Τϥʔ࣌ʹͲͷΑ͏ͳ݁Ռ͕ग़ྗ͞Ε͔ͨอଘ

Slide 43

Slide 43 text

֤ઃఆ 2.CodeceptionͰͷςετ࣮૷

Slide 44

Slide 44 text

Unit Test 2.CodeceptionͰͷςετ࣮૷

Slide 45

Slide 45 text

2.CodeceptionͰͷςετ࣮૷ unit.suite.yml # Codeception Test Suite Configuration # # Suite for unit or integration tests. actor: UnitTester modules: enabled: - Asserts - \Helper\Unit

Slide 46

Slide 46 text

2.CodeceptionͰͷςετ࣮૷ generate:test - testϑΝΠϧ࡞੒ $ vendor/bin/codecept generate:test unit HogeTest

Slide 47

Slide 47 text

Functional Test 2.CodeceptionͰͷςετ࣮૷

Slide 48

Slide 48 text

2.CodeceptionͰͷςετ࣮૷ functional.suite.yml actor: FunctionalTester modules: enabled: # add a framework module here - \Helper\Functional - Symfony: app_path: 'app' var_path: 'var' - Db: dsn: 'sqlite:var/data.sqlite' user: '' password: '' populate: true dump: 'tests/_data/dump.sql'

Slide 49

Slide 49 text

actor: FunctionalTester modules: enabled: # add a framework module here - \Helper\Functional - Symfony: app_path: 'app' var_path: 'var' - Db: dsn: 'sqlite:var/data.sqlite' user: '' password: '' populate: true dump: 'tests/_data/dump.sql' 2.CodeceptionͰͷςετ࣮૷ ϑϨʔϜϫʔΫͷઃఆ functional.suite.yml

Slide 50

Slide 50 text

actor: FunctionalTester modules: enabled: # add a framework module here - \Helper\Functional - Symfony: app_path: 'app' var_path: 'var' - Db: dsn: 'sqlite:var/data.sqlite' user: '' password: '' populate: true dump: 'tests/_data/dump.sql' 2.CodeceptionͰͷςετ࣮૷ %#ͷઃఆ functional.suite.yml

Slide 51

Slide 51 text

2.CodeceptionͰͷςετ࣮૷ generate:cept - ceptϑΝΠϧ࡞੒ generate:cest - cestϑΝΠϧ࡞੒ $ vendor/bin/codecept generate:cept functional HogeCept $ vendor/bin/codecept generate:cest functional HogeCest

Slide 52

Slide 52 text

Acceptance Test 2.CodeceptionͰͷςετ࣮૷

Slide 53

Slide 53 text

2.CodeceptionͰͷςετ࣮૷ acceptance.suite.yml actor: AcceptanceTester modules: enabled: - WebDriver: url: http://localhost:8000 browser: phantomjs - \Helper\Acceptance - Db: dsn: 'sqlite:var/data.sqlite' user: '' password: '' populate: true dump: 'tests/_data/dump.sql' env: firefox: modules: config: WebDriver: browser: firefox

Slide 54

Slide 54 text

actor: AcceptanceTester modules: enabled: - WebDriver: url: http://localhost:8000 browser: phantomjs - \Helper\Acceptance - Db: dsn: 'sqlite:var/data.sqlite' user: '' password: '' populate: true dump: 'tests/_data/dump.sql' env: firefox: modules: config: WebDriver: browser: firefox 2.CodeceptionͰͷςετ࣮૷ acceptance.suite.yml ϒϥ΢βͷઃఆ

Slide 55

Slide 55 text

2.CodeceptionͰͷςετ࣮૷ 1)1#SPXTFS 1IBOUPN+4 pSFGPY DISPNF +BWB4DSJQU º ˚ ̋ #BTJDೝূ ̋ ˚ ̋ ࣮ߦ଎౓ ̋ ˚ º

Slide 56

Slide 56 text

2.CodeceptionͰͷςετ࣮૷ 1)1
 #SPXTFS 1IBOUPN+4 'JSFGPY $ISPNF 4FMFOJVN4UBOEBMPOF 4FSWFS ̋ ̋ ̋ 1IBOUPN+4 ̋ DISPNFESJWFS ̋ Required

Slide 57

Slide 57 text

ϒϥ΢βࢦఆ PHPBrowser PhantomJS firefox/chrome 2.CodeceptionͰͷςετ࣮૷ modules: enabled: - PhpBrowser: url: http://localhost:8000 modules: enabled: - WebDriver: url: http://localhost:8000 browser: phantomjs modules: enabled: - WebDriver: url: http://localhost:8000 browser: firefox

Slide 58

Slide 58 text

2.CodeceptionͰͷςετ࣮૷ generate:cept - ceptϑΝΠϧ࡞੒ generate:cest - cestϑΝΠϧ࡞੒ $ vendor/bin/codecept generate:cept acceptance HogeCept $ vendor/bin/codecept generate:cest acceptance HogeCest

Slide 59

Slide 59 text

ςετ࣮૷ 2.CodeceptionͰͷςετ࣮૷

Slide 60

Slide 60 text

CeptͱCest 2.CodeceptionͰͷςετ࣮૷

Slide 61

Slide 61 text

2.CodeceptionͰͷςετ࣮૷ $FQU w ্͔Βॱʹ࣮ߦ w ϑΝΠϧγφϦΦ w ؆୯ͳγφϦΦ޲͖ γφϦΦϑΝΠϧ $FTU w 1)16OJUͷ༷ʹهड़ w ϝιουγφϦΦ w ෳࡶͳγφϦΦ0, γφϦΦΫϥε

Slide 62

Slide 62 text

2.CodeceptionͰͷςετ࣮૷ Cept wantTo('͓໰͍߹Θͤొ࿥ςετ'); $I->amOnPage('/inquiry'); $I->canSee('͓໰͍߹Θͤ', '#title'); $I->fillField('#inquiry_name', '͢Έͩɹ͍ͬ΃͍'); $I->fillField('#inquiry_email', '[email protected]'); $I->fillField('#inquiry_question', '͓໰͍߹Θͤ಺༰'); $I->click('ૹ৴'); $I->canSee('͓໰͍߹Θͤ׬ྃ͠·ͨ͠ɻ', '#title');

Slide 63

Slide 63 text

2.CodeceptionͰͷςετ࣮૷ Cest amOnPage('/inquiry'); $I->canSee('͓໰͍߹Θͤ', '#title'); $I->fillField('#inquiry_name', '͢Έͩɹ͍ͬ΃͍'); $I->fillField('#inquiry_email', '[email protected]'); $I->fillField('#inquiry_question', '͓໰͍߹Θͤ಺༰'); $I->click('ૹ৴'); $I->canSee('͓໰͍߹Θͤ׬ྃ͠·ͨ͠ɻ', '#title'); } }

Slide 64

Slide 64 text

Slide 65

Slide 65 text

2.CodeceptionͰͷςετ࣮૷ $FQU w ্͔Βॱʹ࣮ߦ w ϑΝΠϧγφϦΦ w ؆୯ͳγφϦΦ޲͖ γφϦΦϑΝΠϧ $FTU w 1)16OJUͷ༷ʹهड़ w ϝιουγφϦΦ w ෳࡶͳγφϦΦ0, γφϦΦΫϥε ɹ Φ ε ε ϝ ʂ ɹ

Slide 66

Slide 66 text

ϝιου උߟ ࢦఆͷϖʔδʹҠಈ *BN0O1BHF l63-z BDDFQUBODFTVJUFZNM ʹࢦఆͨ͠63-ʹ௥Ճ͞ ΕͯΞΫηεɻ ϖʔδʹࢦఆͷจࣈ͕͋ Δ͔ *TFF lจࣈྻz *TFF lจࣈྻz lཁ ૉz *DBO4FF lจࣈྻz DBOΛ͚ͭΔͱݟ͔ͭΒ ͳͯ͘΋ςετ͕ࢭ·Β ͳ͍ ϖʔδʹࢦఆͷจࣈ͕ͳ ͍͔ *EPOU4FF lจࣈྻz *EPOU4FF lจࣈྻz lཁૉz *DBOU4FF lจࣈྻz DBOΛ͚ͭΔͱݟ͔ͭΒ ͳͯ͘΋ςετ͕ࢭ·Β ͳ͍ ΫϦοΫ *DMJDL lϩάΠϯz *DMJDL lMPHJOz จࣈྻ 9QBUI $44 4FMFDUPSͰࢦఆ Α͘࢖͏ϝιου

Slide 67

Slide 67 text

ϝιου උߟ ςΩετϘοΫεʹॻ͘ *pMM'JFME lOBNFz lWBMVFz *pMM'JFME lOBNFz lWBMVFz ϑΟʔϧυ ໊ 9QBUI $444FMFDUPS Ͱࢦఆ ϥδΦϘλϯબ୒ * DIFDL0QUJPO lOBNFz lWBMVFz * ϑΟʔϧυ ໊ 9QBUI $444FMFDUPS Ͱࢦఆ ηϨΫτϘοΫεɺ νΣοΫϘοΫεબ୒ * TFMFDU0QUJPO lOBNFz lWBMVFz * ϑΟʔϧυ ໊ 9QBUI $444FMFDUPS Ͱࢦఆ ·ͱΊͯϑΥʔϜૹ৴ * TVCNJU'PSN bGPSN` ϑΟʔϧυ ໊ 9QBUI $444FMFDUPS Ͱࢦఆ Α͘࢖͏ϝιουʢFormʣ

Slide 68

Slide 68 text

ϝιου උߟ %#ʹࢦఆͷσʔλ͕͋ Δ͔֬ೝ *TFF*O%BUBCBTF bςʔϒϧ ໊` DBOΛ͚ͭΔͱݟ͔ͭΒ ͳͯ͘΋ςετ͕ࢭ·Β ͳ͍ %#ʹࢦఆͷσʔλ͕ͳ ͍͔֬ೝ *EPOU4FF*O%BUBCBTF bςʔ ϒϧ໊` DBOΛ͚ͭΔͱݟ͔ͭͬ ͯ΋ςετ͕ࢭ·Βͳ͍ σʔλΛొ࿥͢Δ *IBWF*O%BUBCBTF bςʔϒϧ ໊` ςετσʔλ࡞੒࣌ʹ σʔλΛऔಘ͢Δ *HSBC'SPN%BUBCBTF bςʔϒϧ໊` bऔಘϑΟʔϧυ໊` Α͘࢖͏ϝιουʢDBʣ

Slide 69

Slide 69 text

2.CodeceptionͰͷςετ࣮૷ /** * ొ࿥ςετ * * @param AcceptanceTester $I */ public function registerTest(AcceptanceTester $I) { $I->wantToTest('ొ࿥ςετ'); $I->canSee('͓໰͍߹Θͤ', '#title'); $I->fillField('#inquiry_name', '͢Έͩɹ͍ͬ΃͍'); $I->fillField('#inquiry_email', '[email protected]'); $I->fillField('#inquiry_question', '͓໰͍߹Θͤ಺༰'); $I->click('ૹ৴'); $I->canSee('͓໰͍߹Θͤ׬ྃ͠·ͨ͠ɻ', '#title'); $I->canSeeInDatabase('inquiry', [ 'name' => '͢Έͩɹ͍ͬ΃͍', 'email' => '[email protected]', 'question' => '͓໰͍߹Θͤ಺༰', ]); }

Slide 70

Slide 70 text

/** * ొ࿥ςετ * * @param AcceptanceTester $I */ public function registerTest(AcceptanceTester $I) { $I->wantToTest('ొ࿥ςετ'); $I->canSee('͓໰͍߹Θͤ', '#title'); $I->fillField('#inquiry_name', '͢Έͩɹ͍ͬ΃͍'); $I->fillField('#inquiry_email', '[email protected]'); $I->fillField('#inquiry_question', '͓໰͍߹Θͤ಺༰'); $I->click('ૹ৴'); $I->canSee('͓໰͍߹Θͤ׬ྃ͠·ͨ͠ɻ', '#title'); $I->canSeeInDatabase('inquiry', [ 'name' => '͢Έͩɹ͍ͬ΃͍', 'email' => '[email protected]', 'question' => '͓໰͍߹Θͤ಺༰', ]); } 2.CodeceptionͰͷςετ࣮૷ JElUJUMFzʹʰ͓໰͍߹Θͤʱ ͱग़ྗ͞Ε͍ͯΔ͔ʁ

Slide 71

Slide 71 text

/** * ొ࿥ςετ * * @param AcceptanceTester $I */ public function registerTest(AcceptanceTester $I) { $I->wantToTest('ొ࿥ςετ'); $I->canSee('͓໰͍߹Θͤ', '#title'); $I->fillField('#inquiry_name', '͢Έͩɹ͍ͬ΃͍'); $I->fillField('#inquiry_email', '[email protected]'); $I->fillField('#inquiry_question', '͓໰͍߹Θͤ಺༰'); $I->click('ૹ৴'); $I->canSee('͓໰͍߹Θͤ׬ྃ͠·ͨ͠ɻ', '#title'); $I->canSeeInDatabase('inquiry', [ 'name' => '͢Έͩɹ͍ͬ΃͍', 'email' => '[email protected]', 'question' => '͓໰͍߹Θͤ಺༰', ]); } 2.CodeceptionͰͷςετ࣮૷ JElJORVJSZ@OBNFzʹʰ͢Έͩɹ͍ͬ΃͍ʱ Λೖྗ͢Δ

Slide 72

Slide 72 text

/** * ొ࿥ςετ * * @param AcceptanceTester $I */ public function registerTest(AcceptanceTester $I) { $I->wantToTest('ొ࿥ςετ'); $I->canSee('͓໰͍߹Θͤ', '#title'); $I->fillField('#inquiry_name', '͢Έͩɹ͍ͬ΃͍'); $I->fillField('#inquiry_email', '[email protected]'); $I->fillField('#inquiry_question', '͓໰͍߹Θͤ಺༰'); $I->click('ૹ৴'); $I->canSee('͓໰͍߹Θͤ׬ྃ͠·ͨ͠ɻ', '#title'); $I->canSeeInDatabase('inquiry', [ 'name' => '͢Έͩɹ͍ͬ΃͍', 'email' => '[email protected]', 'question' => '͓໰͍߹Θͤ಺༰', ]); } 2.CodeceptionͰͷςετ࣮૷ l*ORVJSZzςʔϒϧʹ ࢦఆͷ಺༰Ͱొ࿥͞Εͨ
 σʔλ͕͋Δ͔֬ೝ

Slide 73

Slide 73 text

id, classΛద੾ʹηοτ 2.CodeceptionͰͷςετ࣮૷ CodeceptionͰͷςετָ͕ʹʂ

Slide 74

Slide 74 text

Conclusion • ઃఆϑΝΠϧͰɺFWɾϒϥ΢βͳͲΛઃఆ • Functional, Acceptance͸ςετͷॻ͖ํతʹ͸΄΅ಉ͡ • Functional͸WebαʔόΛհ͞ͳ͍ • ϒϥ΢βʹΑΓͰ͖ͳ͍͜ͱ΋͋Δ • CeptΑΓ΋Cest͕Φεεϝ • class, idΛద੾ʹηοτ͢Δͱςετ͠΍͍͢

Slide 75

Slide 75 text

Codeception Tips ΋ͬͱ஥ྑ͘͢ΔͨΊͷ

Slide 76

Slide 76 text

env 3.Codeception Tips

Slide 77

Slide 77 text

envͰ࣮ߦ؀ڥΛ੾Γସ͑

Slide 78

Slide 78 text

actor: AcceptanceTester modules: enabled: - WebDriver: url: http://localhost:8000 browser: phantomjs - \Helper\Acceptance - Db: dsn: 'sqlite:var/data.sqlite' user: '' password: '' populate: true dump: 'tests/_data/dump.sql' env: firefox: modules: config: WebDriver: browser: firefox ࢦఆͨ͠಺༰Ͱ্ॻ͖ ͜͜Ͱ͸CSPXTFSΛpSFGPYʹ্ॻ͖ 3.Codeception Tips

Slide 79

Slide 79 text

$ vendor/bin/codecept run acceptance —env=firefox ؀ڥ੾Γସ͑ 3.Codeception Tips

Slide 80

Slide 80 text

/** * @param AcceptanceTester $I * @env firefox * @env chrome */ public function tryToTest(AcceptanceTester $I) { // env=firefox or chrome͚ͩςετ } ΞϊςʔγϣϯͰ؀ڥΛࢦఆ 3.Codeception Tips

Slide 81

Slide 81 text

actor: AcceptanceTester modules: enabled: - WebDriver: url: http://localhost:8000 browser: phantomjs - \Helper\Acceptance - Db: dsn: 'sqlite:var/data.sqlite' user: '' password: '' populate: true dump: 'tests/_data/dump.sql' env: firefox: modules: config: WebDriver: browser: firefox window_size: 1024x768 3.Codeception Tips ΢Οϯυ΢αΠζมߋ

Slide 82

Slide 82 text

disabled 3.Codeception Tips

Slide 83

Slide 83 text

actor: AcceptanceTester modules: enabled: - WebDriver: url: http://localhost:8000 browser: phantomjs - \Helper\Acceptance env: firefox: modules: config: WebDriver: browser: firefox phpbrowser: modules: enabled: - PhpBrowser: url: http://localhost:8000 ͜Εͩͱ--env=phpbrowserͰΤϥʔʂ 3.Codeception Tips

Slide 84

Slide 84 text

actor: AcceptanceTester modules: enabled: - WebDriver: url: http://localhost:8000 browser: phantomjs - \Helper\Acceptance env: firefox: modules: config: WebDriver: browser: firefox phpbrowser: modules: enabled: - PhpBrowser: url: http://localhost:8000 ͜Εͩͱ--env=phpbrowserͰΤϥʔʂ ͲͪΒͷϒϥ΢βͰςετ͢Ε͹
 Α͍͔Θ͔Βͳ͘ͳ͍ͬͯΔɻ 3.Codeception Tips

Slide 85

Slide 85 text

actor: AcceptanceTester modules: enabled: - WebDriver: url: http://localhost:8000 browser: phantomjs - \Helper\Acceptance env: firefox: modules: config: WebDriver: browser: firefox phpbrowser: modules: disabled: - WebDriver enabled: - PhpBrowser: url: http://localhost:8000 EJTBCMFEͰແޮԽ 3.Codeception Tips

Slide 86

Slide 86 text

CSSηϨΫλͷௐ΂ํ 3.Codeception Tips

Slide 87

Slide 87 text

3.Codeception Tips

Slide 88

Slide 88 text

3.Codeception Tips ͜͜ͷCSSηϨΫλ͕Θ͔Βͳ͍

Slide 89

Slide 89 text

3.Codeception Tips CSSηϨΫλͷίϐʔ͕Մೳ

Slide 90

Slide 90 text

3.Codeception Tips $$(‘[ηϨΫλ]’); Ͱݕূ

Slide 91

Slide 91 text

લɾޙॲཧϝιου 3.Codeception Tips

Slide 92

Slide 92 text

/** * ॏෳొ࿥ςετ * @param AcceptanceTester $I * @before createData * @after afterMethod */ public function duplicateTest(AcceptanceTester $I) { $I->wantToTest('ॏෳొ࿥ςετ'); $I->canSee('͓໰͍߹Θͤ', '#title'); $I->fillField('#inquiry_name', '͢Έͩɹ͍ͬ΃͍'); $I->fillField('#inquiry_email', '[email protected]'); $I->fillField('#inquiry_question', '͓໰͍߹Θͤ಺༰'); $I->click('ૹ৴'); $I->canSee('͜ͷϝʔϧΞυϨε͸͢Ͱʹ࢖༻͞Ε͍ͯ·͢'); } 3.Codeception Tips

Slide 93

Slide 93 text

/** * ॏෳςετ༻ͷσʔλΛ࡞੒͢Δ * * @param AcceptanceTester $I */ protected function createData(AcceptanceTester $I) { $I->haveInDatabase('inquiry', [ 'name' => '͢Έͩɹ͍ͬ΃͍', 'email' => '[email protected]', 'question' => '͓໰͍߹Θͤ಺༰', 'created_at' => \Carbon\Carbon::now() ]); } 3.Codeception Tips લɾޙॲཧ༻ϝιου͸”protected”

Slide 94

Slide 94 text

@CFGPSF !CFGPSFͭΊ !BGUFSͭΊ 3.Codeception Tips @BGUFS !CFGPSFͭΊ !BGUFSͭΊ ςετϝιου

Slide 95

Slide 95 text

Conclusion • envΛࢦఆ͢Δ͜ͱͰɺϒϥ΢βͳͲ؀ڥΛ੾ Γସ͑ • @before, @afterΛઃఆͯ͠ɺಠࣗͷલɾޙॲ ཧΛૠೖ • CSSηϨΫλͰࠔͬͨΒChrome։ൃπʔϧʂ

Slide 96

Slide 96 text

CodeceptionͱҰॹʹ
 ςετͱ஥ྑ͘͠Α͏ʂ

Slide 97

Slide 97 text

͝੩ௌ
 ͋Γ͕ͱ͏͍͟͝·ͨ͠