Slide 1

Slide 1 text

Ruby && Webํ໘͔Βݟ͑ͨ
 ΤϯυπʔΤϯυςετͷ
 ྺ࢙ͱࢥ͍ग़ ॾڮګհ @moro 

Slide 2

Slide 2 text

‣ (ࣸਅ) ղফͰ͖ͨෆ҆ 

Slide 3

Slide 3 text

 Kyosuke MOROHASHI moro moro

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

લ࢙ 

Slide 6

Slide 6 text

‣ ΞϓϦέʔγϣϯͷ਽ܗΛ࡞Δͱςετ؀ڥ͕͍ͭͯ͘Δɻ ‣ test/models, test/controllers, test/views … ‣ ʮ୯ମʯςετ͕த৺ Ruby on Rails 

Slide 7

Slide 7 text

‣ & rspec_rails ‣ spec/models, spec/controllers, …. RSpec 

Slide 8

Slide 8 text

‣ ϞσϧɾϏϡʔɾίϯτϩʔϥΛ౷߹(integrate)ͯ͠
 ςετ͢Δɻ ‣ ୯ҰϦΫΤετʹ͓͍ͯɺΞϓϦέʔγϣϯͷ֤ϨΠϠ͕ ҙਤ௨Γ౷߹ͯ͠ಈ͔͘ɺΛςετ͢Δɻ ‣ ෳ਺ϦΫΤετʹΘͨΔڍಈ(͋ͷը໘͔Β͜ͷը໘ʹભҠͯͦ͠ΕΛೖྗ…) ͸ ςετͰ͖ͳ͍ɻ Integration test / Request spec 

Slide 9

Slide 9 text

‣ ϒϥ΢βૢ࡞ΛࣗಈԽͯ͠ςετ͢Δ Selenium ͱɺ ‣ ਓؒͷૢ࡞Λه࿥ͯ͠ςετέʔεΛ࡞ͬͯ͘ΕΔ Selenium IDE Selenium & Selenium IDE 

Slide 10

Slide 10 text

‣ ϓϩδΣΫτϝϯόʔ͕ɺຖே࠷৽ͷίʔυΛνΣοΫΞ ΢τͯ͠Ұ௨Γ৮ͬͯΈΔɻԿ͔͋Ε͹͙͢ʹ௚͢ɻ खಈͰͷܧଓతE2Eςετ 

Slide 11

Slide 11 text

ෳ਺ϦΫΤετʹ·͕ͨΔɺϢʔβʔ͕࣮ࡍʹ࢖͏
 γφϦΦʹԊͬͨςετ͸Αͦ͞͏ɻ ͜ͷ࣌఺Ͱ͸·ͩखಈςετɺ࣮ߦ͢Δͷ͕େมɻ Selenium IDEͰه࿥ͨ͠ςετ͸͙͢յΕΔɻ ࣮ײͰ͖ͨ͜ͱ 

Slide 12

Slide 12 text

Webrat + Cucumber 

Slide 13

Slide 13 text

‣ ΤϯυπʔΤϯυςετΛɺࣗવݴޠͰ͔͚Δɻ ‣ MVCϨΠϠ௨؏ & ෳ਺ΞΫγϣϯ ‣ ࣗવݴޠͰςετ͕͔͚Δɻ ‣ Gherkin ϑΥʔϚοτ ‣ Given, When, Then / લఏɺ΋͠ɺͳΒ͹ Cucumber 

Slide 14

Slide 14 text

‣ Cucumber ͷόοΫΤϯυɺWebΞϓϦΛςετ͢Δͨ ΊͷϥΠϒϥϦɻ ‣ ηογϣϯ(cookie)ΛҾ͖ͭ͛Δ ‣ ʮෳ਺ϦΫΤετΛॱ൪ʹݺΜͩʯςετ͕͔͚ΔΑ͏ʹ ‣ ϦϯΫ΍ϑΥʔϜΛૢ࡞͢Δ(ͭ΋ΓͰ࢖͑Δ)API͕͋ͬͨ Webrat 

Slide 15

Slide 15 text

‣ ࣗવݴޠͰॻ͍ͨ *.feature Λಈ͔ͨ͢Ίͷ࢓૊ΈΛ step_definitions ͱͯ͠ॻ͘ɻ ‣ step_definitions ͷத͸Rubyίʔυɻࣗવݴޠͱ͸
 ਖ਼نදݱͰϚονϯά͞ΕΔɻ Cucumber + Webrat 

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

‣ Gherkin ςΩετΛϓϩάϥϚͱɺϓϩάϥϚͰ͸ͳ͍ਓ ͱɺڞ༗Ͱ͖ͳ͍͔ͨΊͨ͠ɻ ‣ ϏδωεαΠυ΁ͷ࢓༷ݕ౼/߹ҙʹ ‣ ݟੵ΋Γ୯Ґʹ࢖ͬͯΈͨΓ΋ ‣ νʔϜͷ৽ϝϯόʔ΁ͷઆ໌ʹ ‣ ։ൃ࣌ͷҙࣝ߹Θͤʹ (feature͚ͩॻ͍ͨੜࣽ͑PRΛϨϏϡʔͨ͠Γ) ࢲͱCucumber 

Slide 18

Slide 18 text

Web ͷɺγφϦΦهड़Ͱ͖ΔE2Eࣗಈςετͷ࢓૊Έ͸ ΍͸Γͪΐ͏΂ΜΓɻ ฼ޠͰॻ͍ͯ͋Δͷ΋ɺ΍ͬͯΈΔͱΘ͔Γ΍͍͢ɻ ૿͑ͨ૚͕ʮ೔ຊޠϓϩάϥϛϯάʯʹͳͬͯ͠·͏ͱ
 ϓϩάϥϚʹͱͬͯ͸൥ࡶͳ͚ͩɻ ࣮ײͰ͖ͨ͜ͱ 

Slide 19

Slide 19 text

“ ࣮ࡍʹ͸ɺͦΕΒ͸ඇٕज़ܥͷεςʔΫϗϧμʔ
 ʢར֐ؔ܎ऀʣͱҰॹʹςετΛॻ͘ͱ͍͏ɺ
 Սۭͷ৔ॴͰ͔͠໾ʹཱͪ·ͤΜɻ https://martinfowler.com/bliki/DynamicTyping.html 
 ( http://bliki-ja.github.io/DynamicTyping/ )

Slide 20

Slide 20 text



Slide 21

Slide 21 text

‣ ඞͣ͠΋ʮॻ͍ͯʯ΋ΒΘͳ͚Ε͹ͳΒͳ͍Θ͚Ͱ͸ͳ͍ɻ ‣ ಉ͡දݱͰεςʔΫϗϧμʔ͕Έͳڞ௨ཧղ͢Δͷ͕େࣄɻ ‣ ʮεςʔΫϗϧμʔʯʹ͸΋ͪΖΜɺ։ൃνʔϜ΋ؚ·ΕΔɻ ‣ ͦͷͨΊͷݴޠ΍ޠኮΛҭͯΔͷ͕େ੾ͩͬͨɻ Α͘ݴΘΕ·͢ɺɺɺ͚ͩͲ 

Slide 22

Slide 22 text

Capybara 

Slide 23

Slide 23 text

‣ Webratޓ׵APIͷ͋ΔɺͳϥΠϒϥϦ ‣ υϥΠόΛ੾Γସ͑ͯJavaScript΋ಈ͔ͤΔΑ͏ʹɻ ‣ Selenium΋ߴϨϕϧAPIͰ࢖͑ΔΑ͏ʹͳͬͨɻ Capybara௒ϕϯϦɺͰ͢ΑͶ 

Slide 24

Slide 24 text

JavaScript ·ͰؚΉΤϯυπʔΤϯυςετ͸
 ΋͏΋ͷ͍͢͝خ͍͠ɻ Capybara APIࣗମ΋ͲΜͲΜศརʹͳ͍ͬͯΔɻ JS͕ಈ͘֎෦ϒϥ΢βΛىಈ͢Δͷ͸ɺศར͚ͩͲ஗͍& Τϥʔ͕Θ͔ΓͮΒ͘ͳͬͨɻ ࣮ײͰ͖ͨ͜ͱ 

Slide 25

Slide 25 text

‣ RailsϒʔϜͱͱ΋ʹਓؾ্ঢɺߴػೳԽ͕ਐΉɻ ‣ shared example, subject, let, ϞοΫඪ४ఏڙ
 ‣ RSpec 3ͰAPIͱ(งғؾ)͕มΘΔɻ ‣ test-unit ΍ power-assert ͷ੒ख़ͱͱ΋ʹɺxunit଒ͷ ݟ௚͕͠ਐΉɻ ಉ࣌ظʹ(ྑ͘΋ѱ͘΋)RSpecʹ΋େ͖ͳมԽ͕ 

Slide 26

Slide 26 text

Capybara + X season 1 

Slide 27

Slide 27 text

‣ Turnip ‣ RSpecͷϥϯλΠϜͰɺGherkinελΠϧͷςετΛ
 ࣮ߦͰ͖Δɻ ‣ Cukeͷ൥ࡶϙΠϯτͩͬͨɺstep definitionsఆٛͱͷ
 ϚονϯάΛվળ͍ͯ͠Δɻ + RSpec + Gherkin 

Slide 28

Slide 28 text

‣ feature spec ‣ Capybara APIΛ௚઀࢖ͬͯɺΤϯυπʔΤϯυςετΛ ॻ͚ΔΑ͏ʹͨ͠ɻ ‣ Ұ෦ͷޠኮ(feature, scenario…)Λಋೖ͕ͨ͠ɺ͋͘· ͰRSpecͷϝιου໊ΤΠϦΞεʹͱͲ·Δɻ ‣ 2017೥࣌఺ͩͱɺ͜Ε͕ଟ਺೿͔ͳɻ + RSpec - Gherkin 

Slide 29

Slide 29 text

‣ σʔλͷηοτΞοϓ͕ͭΒ͍ɻ ‣ Τϯυ͔ΒผͷΤϯυ·Ͱɺ௕େͳΦϒδΣΫτάϥϑ͕ඞཁͱͳΓ͕ͪɻ ‣ ͕͔͔࣌ؒͬͨΓɺҙਤͤ͵ෆ׬શσʔλ͕Ͱ͖ͨΓɻ ‣ ૊Έ߹Θͤͷςετ͕ͭΒ͍ɻ ‣ shared exampleΛۦ࢖ͨ݁͠Ռɺݟ௨͕͠ѱ݅͘਺΋ଟ͘ͳΔɻ feature spec ͭΒ͍ܥ ͋Δ͋Δ 

Slide 30

Slide 30 text

JavaScript ·ͰؚΉΤϯυπʔΤϯυςετ͸
 ΋͏΋ͷ͍͢͝خ͍͠ (΄Μ͜Ε) Α͍ΤϯυπʔΤϯυςετΛॻ͘ͷ͸೉͍͠ɻ υϝΠϯʹԊͬͨޠኮΛҭͯΔͷ΋ɻ ݕূ͢΂͖݁ՌͷݟۃΊ(ͳΜͱͳ͘Ξαʔτ)΋ɻ ࣮ײͰ͖ͨ͜ͱ 

Slide 31

Slide 31 text

 https://speakerdeck.com/akiinyo/du-miyasuiendotuendotesutogashu-kitai?slide=5

Slide 32

Slide 32 text

શϨΠϠΛ·ͱΊςετ͢Δʹ͸ศར ͚ͩͲɺେ͖ͯ͘஗͍ςετʹͳΓ͕ͪ ݁Ռͱͯ͠: 

Slide 33

Slide 33 text

Capybara + X season 2 

Slide 34

Slide 34 text

‣ Appium ‣ Web͚ͩͰ͸ͳ͘ϞόΠϧΞϓϦ΋ࣗಈςετՄೳʹɻ ‣ Rails 5.1+ ͰCapybara͕ඪ४ʹɻ ‣ SystemTestCaseͱͯ͠࢖͑ΔΑ͏ʹͳΓɺRSpecͰ΋ System Specͱͯ͠αϙʔτɻ ‣ Selenium υϥΠόͰheadless chrome΋࢖͑ΔΑ͏ʹɻ ͜Ε͔ΒͷΤϯυπʔΤϯυςετ 

Slide 35

Slide 35 text

·ͱΊ

Slide 36

Slide 36 text

‣ ࣗಈԽ͞Εͨ ‣ ΤϯυπʔΤϯυͷςετ͸ ‣ ͱͯ΋Α͍΋ͷͩ ࣮ײͰ͖ͨՁ஋ 

Slide 37

Slide 37 text

‣ ΤϯυπʔΤϯυςετ͸ ‣ େ͖ͯ͘ ‣ ஗ͯ͘ ‣ ॻ͘/ϝϯς͢Δͷ͕ΊΜͲ͍͘͞ɺςετʹͳΓ͕ͪ ࢒ͬͨ՝୊ 

Slide 38

Slide 38 text

“ ࣗಈςετΛॻ͘ϓϥΫςΟε͸ੈͷ தʹཱ೿ʹࠜ෇͖ɺࣗ෼ͨͪͰࣗಈς ετΛॻ͘ͷ͕ʮ;ͭ͏ʯͳੈͷதʹ ͳΓ·ͨ͠ɻ͜Ε͸େ͖ͳલਐͰ͢ɻ — テスト駆動開発 「付録C」

Slide 39

Slide 39 text

‣ ໨ͷલͷϑΟʔνϟΛͲ͏͍͏γφϦΦʹͰ͖Δ͔ɺ
 ͦͷγφϦΦͰͷςετର৅͸Կ͔ɺΛΑ͘ߟ͑Δɻ ‣ ύϥϝλϥΠζυςετ(γφϦΦΞ΢τϥΠϯ)͸ɺ
 ΋͏ͪΐͬͱٕज़తʹ͏·͘΍Εͦ͏ͳؾ΋͢Δɻ ‣ υϝΠϯ΍νʔϜʹ߹ͬͨޠኮΛҭ͍ͯͯ͘ɻ ࢒ͬͨ՝୊ͱ޲͖߹͑Δͱ͍͍Ͱ͢ΑͶ 

Slide 40

Slide 40 text

“ ςετۦಈ։ൃ͸ɺϓϩάϥϛϯάதͷෆ҆Λ ίϯτϩʔϧ͢Δख๏ͩɻ ུ 
 ʮ͜Ε͸ࠔ೉ͳ໰୊ͳͷͰɺ࠷ॳ͔Β͢΂ͯΛ ݟ௨ͤΔΘ͚Ͱ͸ͳ͍ʯͱ͍͏ਅͬ౰ͳײ֮ͷ ͜ͱͩɻ — テスト駆動開発 「まえがき」

Slide 41

Slide 41 text

‣ ʮϑΟʔνϟશମʯ͸΋ͪΖΜ࠷ॳ͔Βݟ౉ͤͳ͍ɻ ‣ Ͱ΋ϑΟʔνϟͷࠜຊΛͪͬͪΌ͘࡞ͬͯɺͦͷςετΛ ௨͠ଓ͚Δ͜ͱ͸Ͱ͖ͦ͏ɻ ‣ ࠜຊ͸Կ͔ɺ͸ߟ͑Δɻ ‣ νʔϜͷޠኮ͕ҭ͍ͬͯΕ͹ɺ͍ͬͦ͏εϜʔζʹͳΓͦ͏ɻ ʮΤϯυπʔΤϯυʯ΁ͷద༻