RSpecを触る前に僕が知っておきたかったこと
34QFD֓कΓ͍͢ςετίʔυͷϧʔϧ5*14
View Slide
ΞδΣϯμ ࣗݾհ 34QFD֓ཁ جຊػೳ ޙʑࠔΓ͕ͪͳΞϯνϚφʔ ςετ࣌ؒΛ͘͢Δ ·ͱΊʙ͜ͷ͚̎ͭͩकΕ͖ͬͱʙ
͡Ίʹʮςετॻ͍ͨ͜ͱͳ͍ʂʯʮςετௐ͚ͨͲɺͬͨ͜ͱͳ͍ʂʯʮςετॻ͍ͯΈ͚ͨͲͬ͘͠Γ͖ͯͳ͍ʂʯΛ͛ͨͷͰɺίʔυΑΓ͕ଟΊͰ͢ɻ
ࣗݾհ໊લɿന๎ձࣾɿגࣜձࣾϕʔγοΫʢ৽ଔ̏ʣ͞ΘͬͯΔ͜ͱɿ3BJMT "84RJJUBͱ͔UXJUUFSͱ͔ͷ*%ɿOBNJUPQझຯɿϑΥʔτφΠτ
ࣗݾհࣗͷࣝͷཧͱ34QFDʹ͍ͭͯΒͳ͍ൃݟ͕͋Εͱࢥ͍ࠓճͷษڧձͷ༰ʹ͠·ͨ͠ɻ
͜Ε͔Βઆ໌͢Δ͜ͱɺ͜Μͳײ͡ͷڥͷਓ͕͖ͬͯͨ3TQFDͳͷͰ͔ͨ͠͠Βઌೖ؍͕͋Δ͔͠Εͳ͍ͷͰɺͲΜͳαʔϏεʹؔΘ͖͔ͬͯͨͷઆ໌
ձࣾͰ͖ͬͯͨ͜ͱ&$αΠτͷཧαΠτʢ෦ʣ࡞Γม͑ϝσΟΞαΠτอकӡ༻ࢿྉٻαΠτ৽نӳձڭࣨݕࡧαΠτ৽نࢿྉٻαΠτอकӡ༻
ձࣾͰ͖ͬͯͨ͜ͱͲΕ
ձࣾͰ͖ͬͯͨ͜ͱ̍ඵͰམͪͨΒαʔϏε͕Γཱͨͳ͍ɾɾɾ
ձࣾͰ͖ͬͯͨ͜ͱͱ͔Ͱͳ͍ɻ
ձࣾͰ͖ͬͯͨ͜ͱͲΜͲΜػೳͷՃɾमਖ਼ͱ͔͍͢͠ڥ
ձࣾͰ͖ͬͯͨ͜ͱͦΜͳڥͰςετίʔυΛॻ͍͖ͯ·ͨ͠
ҙԿΛςετ͢Ε͍͍ͷ͔ͲΕ͘Β͍ςετ͢Ε͍͍ͷ͔ͱ͔ʹʮઈର͜ΕʯΈ͍ͨͳͷ͕ͳ͍
ҙ34QFDͷϧʔϧʹ͍ͭͯߟ͑ͨ͜ͱΛઆ໌͍͖ͯ͠·͕͢Ұ൪ྑ͍ϧʔϧنͱ͔αʔϏεՔಇͱ͔Λ౿·͑ͯνʔϜϝϯόʔͱ૬ஊܾͯ͠ΊΔͷ͕ϕετ
34QFD֓ཁ" lςετzͷछྨ# ̎େςετϑϨʔϜϫʔΫ
"lςετzͷछྨ2"ςετσΟϨΫλʔςετ։ൃςετ
ͦΕͧΕׂ͕ҧ͏
ʮͲΕ͙Β͍ςετ͢Ε͍͍ͷʁʯ
͜ΕΛߟ͑ΔͨΊʹ͓͓͑ͯ͘͞
2"ςετ2VBMJUZ"TTVSBODFʢ࣭อূʣαʔϏε࣭Λอূʢόάɺૢ࡞ײʣˎ࡞ۀޮԽͷͨΊɺ͜͜Ͱ34QFDͬͯΔձࣾ͋ΔΒ͍͠
σΟϨΫλʔςετJTTVF௨Γʹ࣮͞Ε͍ͯΔ͔νΣοΫˎόάΛཏతʹνΣοΫ͢ΔΑ͏ͳׂͰͳ͍
։ൃςετ։ൃऀ͕։ൃ͍ͨ͢͠Ίʹߦ͏ςετˎࣗ͜ͷύʔτͰΑ͘34QFD͖ͬͯ·ͨ͠
̏ͭͷςετ͜ΕΒ̏ͭͷςετͷॅΈ͚͕େࣄԿΛ34QFDͰ୲อ͢Δͷ͔
։ൃςετʹ͓͚Δ34QFD୲อ͢Δͷશϖʔδɺਖ਼ৗʹΞΫηεͰ͖Δ͔શϝιουɺશΞΫγϣϯʹςετΛߦ͏ى͜Γ͑ͳ͍ೖྗΛ༧ͯ͠ςετ
։ൃςετʹ͓͚Δ34QFD୲อ͢Δͷશϖʔδɺਖ਼ৗʹΞΫηεͰ͖Δ͔શϝιουɺશΞΫγϣϯʹςετΛߦ͏ى͜Γ͑ͳ͍ೖྗΛ༧ͯ͠ςετ͠·ͤΜ
։ൃςετʹ͓͚Δ34QFDओʹҎԼೋͭΛ୲อ͢Δϛε͕ى͜Γ͕ͪͳϩδοΫϏδωεతʹಛʹॏཁͳϩδοΫ
։ൃςετʹ͓͚Δ34QFDϛε͕ى͜Γ͕ͪͳϩδοΫෳࡶͳϩδοΫαʔϏεͷ͍ൣғͰΘΕ͍ͯΔϩδοΫ
։ൃςετʹ͓͚Δ34QFDϏδωεతʹಛʹॏཁͳϩδοΫٻؔ$7ϑϩʔ
։ൃςετʹ͓͚Δ34QFD5*14୲อ͢ΔͷΛߜΔ
#̎େςετϑϨʔϜϫʔΫNJOJUFTU34QFD
γϯϓϧϐϡΞ3VCZଟػೳυΩϡϝϯτ෩NJOJUFTU 3TQFD
NJOJUFTU 3TQFD
NJOJUFTUͱ34QFDNJOJUFTUγϯϓϧ͕͞ਓؾ34QFDߴػೳͳͷͰਓؾϑϨʔϜϫʔΫʹΑΔͷҧ͍ߟ͑ͳ͍͍ͯ͘3TQFDͷ΄͏͕ຊޠͷهࣄ͕ଟ͍ͷͰ͓͢͢Ί
جຊػೳ̏ͭͷTQFDͷׂʢNPEFM DPOUSPMMFS SFRVFTUʣJUͱFYQFDUEFTDSJCFͱDPOUFYUGBDUPSZUSBJUTUVC
ͪͳΈʹυΩϡϝϯτ͜͜IUUQSTQFDJOGPEPDVNFOUBUJPOSTQFDSBJMT
"̏ͭͷTQFDͷׂNPEFMTQFDϞσϧͷϝιου୯ҐͰͷςετϞσϧͷόϦσʔγϣϯςετDPOUSPMMFSTQFD ඇਪBDUJPOͷΠϯελϯεมͷΛςετࢦఆͷVSMɺҙਤ͢ΔSFTQPOTFʹͳ͍ͬͯΔ͔ςετSFRVFTUTQFDࢦఆͷVSMɺҙਤ͢ΔSFTQPOTFʹͳ͍ͬͯΔ͔ςετ
DPOUSPMMFSTQFDඇਪIUUQSTQFDJOGPCMPHSTQFDIBTCFFOSFMFBTFESBJMTTVQQPSUGPSSBJMTSFRVFTUTQFDͰɺίϯτϩʔϥͷͭͷΞΫγϣϯʹूதͰ͖·͕͢ɺίϯτϩʔϥςετͱҟͳΓɺϧʔλɺϛυϧΣΞελοΫɺϥοΫͷϦΫΤετͱϨεϙϯεͷ྆ํ͕ඞཁͰ͢ɻ͜Εɺ͋ͳ͕ͨॻ͍͍ͯΔςετʹݱ࣮ײΛ༩͑ɺDPOUSPMMFSTQFDʹڞ௨͢Δଟ͘ͷΛճආ͢Δͷʹཱͪ·͢ɻެࣜ༁
NPEFMTQFDͱSFRVFTUTQFD͍͚NPEFMTQFDσʔλΛςετ͢ΔSFRVFTUTQFDݟͨΛςετ͢Δ
FYZBNBEBͰදࣔͯ͠Δ͔ςετ
NPEFMTQFDσʔλΛਖ਼͍͠ͰΦϒδΣΫτੜͰ͖Δ͔IFMMPϝιου͕ػೳ͍ͯ͠Δ͔ʁͳͲ
SFRVFTUTQFDݟͨΛZBNBEBʹΞΫηεͰ͖Δ͔ϖʔδཁૉʹzZBNBEBͰ͢ɻzͱ͍͏ ςΩετ͕ଘࡏ͢Δ͔ͳͲ
TQFDΛॻ͘લͷԼ४උςετ͍͢͠.7$ʹ͢ΔϝιουͷҾฦΓͷܕΛἧ͑ΔWJFXͰมͷఆٛͨ͠Γ࠶ೖͨ͠Γ͠ͳ͍ΊͬͪΌWJFXʹذ͕ॻ͍ͯ͋ΔͷΛΊΔ
"̏ͭͷTQFDͷׂ5*14DPOUSPMMFSTQFDΘͳ͍5*14NPEFMTQFDͰσʔλͷऔಘɾܗΛςετ5*14SFRVFTUTQFDͰσʔλͷදࣔΛςετ
#JUͱFYQFDU
$DPOUFYUͱEFTDSJCF
EFTDSJCF DPOUFYU JUEFTDSJCFɿϝιου୯ҐͳͲͷ·ͱ·ΓͰғΉDPOUFYUɿ߹͚ͰғΉJUɿ࠷খ୯ҐͰғΉ
EFTDSJCF DPOUFYU JU5*14EFTDSJCF DPOUFYU JUΛͬͯυΩϡϝϯτ෩ʹॻ͘
ͪͳΈʹ
ͲͬͪͰPLˎ͜ͷ߹DPOUFYUͷ΄͏͕͍͍͚ͲΤϥʔͱ͔ʹͳΒͳ͍
ߦࢦఆ࣮ͯ͠ߦASTQFDϑΝΠϧ໊ߦ൪߸AͰ࣮ߦ
%CFGPSFͱMFU
JUΛ؆ܿʹ͢ΔͨΊʹ
MFUͱMFU
MFUͱMFUw MFUԆධՁɻʢJUͰݺͳ͍ͱ࣮ߦ͞Εͳ͍ʣw MFU֤JU͝ͱͷ࣮ߦલʹධՁɻCFGPSFͱҰॹ
MFUͱCFGPSFͷ͍͚JUͰࢀর͢Δ͔Ͳ͏͔MFUͷ߹ɺJUͰࢀর͢ΔCFGPSFͷ߹ɺJUͰࢀর͠ͳ͍
%CFGPSFͱMFU5*14CFGPSF MFUͰJUΛγϯϓϧʹ5*14CFGPSFͰࢀর͠ͳ͍Ϩίʔυͱ͔Λࣄલ४උ5*14MFUͰJUͰࢀর͢ΔΛࣄલ४උ
%GBDUPSZ
%GBDUPSZ6TFSOBNFඞਢCJSUIQMBDFඞਢCJSUIEBZඞਢUFMඞਢKPCඞਢ
σϑΥϧτͷΛ༻ҙ͢Δ
JUͰҙࣝ͢Δ͜ͱΛߜΕΔ6TFSΦϒδΣΫτ࡞͢Δ6TFSIFMMP͕ਖ਼͘͠ಈ࡞͍ͯ͠Δ͔
%GBDUPSZ5*14ΦϒδΣΫτΛ࡞ΔͨΊͷهड़ΛݮΒ͢
%TUVCϞσϧͷϝιουΛ্ॻ͖͠ɺฦΓΛݻఆͰ͖Δ
%TUVC
ྫΫϥεɿ1SFGϝιουɿEJTUBODF QSFG QSFG"1*ɿ(PPHMF.BQ"1*
͜ͷςετͷԿ͕ʁ
̎ͭͷϝιουΛςετͯ͠Δ͜ͷςετͰʮݝͷڑΛࢉग़͢Δʯʮ(PPHMF.BQ"1*͕ݝͷҐஔใΛࢉग़͢Δʯ
ͭ·Γɾɾɾʮ(PPHMF.BQ"1*ʯ͕͚͜Δͱ1SFGEJTUBODFͷܭࢉ͕ਖ਼͚ͯ͘͜͠Δ
ςετରͷϝιου͚ͩͰ⭕ʮݝͷڑΛࢉग़͢Δʯ❌ʮ(PPHMF.BQ"1*͕ݝͷҐஔใΛࢉग़͢Δʯ
͜͏ͩͱ͢Δͱɾɾɾ(PPHMF.BQ"1*TFBSDIҾͷݝͷҐஔใΛऔಘ͢Δ
BMMPX PCKUPSFDFJWF NFUIPEXJUI BSHBOE@SFUVSO WBMVFBMMPX PCKUPSFDFJWF NFUIPEBOE@SFUVSO WBMVF
ରͷΈͷςετʹͳΔ1SFGEJTUBODFͷΈͷςετ͠(PPHMF.BQ"1*ଆͰ͚ͯͯ͜ςετ͕௨Δͳ͚͔ͥͨ͜ͷௐࠪͷ͕࣌ؒল͚Δ
%TUVC5*14ςετରʹͳΔϝιουΛߜΔ
TUVCͱNPDLεΩοϓࢀߟɿIUUQKBOHBKBODPNCMPHFYQFDUBOEBMMPXJOSTQFD
ΞϯνϚφʔ" EFTDSJCFɺDPOUFYUɺJUͷ͍ํ# MFU CFGPSFͷҐஔʢEFTDSJCFͷ֎ʹग़͞ͳ͍ʣ$ ్தͰVQEBUF% ฒͼॱܥϝιουͰΓ͕ͪͳςετ
"EFTDSJCFɾDPOUFYUɾJUͲ͏͍͏෩ʹͰॻ͚Δ
͜ΕͰΤϥʔ͕ى͖ΔͱAFYQFDU UPFRAʹͯ͠ΈΔ
w AAҎ͕߱FYQFDUͰ͖͍ͯͳ͍
"EFTDSJCFɾDPOUFYUɾJUJUͰԿݸFYQFDU͠ͳ్͍தͰ͚͜Δͱςετ͕தஅͯ͠͠·͏FYQFDU͕ଟ͍ͱԿ͕ਖ਼ৗ͔͔ΓͮΒ͍
࠷খ୯ҐΛJUͰғΉ
ͬͱ͔Γ͘͢
l·ͱ·ΓzΛEFTDSJCFͰl߹͚zΛDPOUFYUͰ
Կ͕͍͍ͷʁΤϥʔى͖ͨ࣌ͷείʔϓΛখ͘͞Ͱ͖Δྫ͑ɺAAʹͳΓ͚ͨ͜ͱ͖෦తʹࣺ͍ͯ͢ྫ͑ɺՃ๏ϝιουΛશআͨ͠ͱ͖
"EFTDSJCFɾDPOUFYUɾJU5*14EFTDSJCFͰz·ͱ·ΓzΛғΉ5*14DPOUFYUͰz߹͚zΛғΉ5*14JUͰz࠷খ୯ҐzΛғΉ
#MFU CFGPSFͷҐஔ
l࢛ଇԋࢉzԼʹMFUՃݮআͦΕͧΕͷςετ͕େ͖͘ͳΔͱ
ͭΒ͍
EFTDSJCFͷ֎ʹMFUΛग़͢ͱ୯७ʹίʔυ͕ಡΈͮΒ͍είʔϓ͕͕ͬͯ͠·͏ͪͳΈʹɺաͳڞ௨ԽΛͨ࣌͠ʹى͖͍͢ɻ
#MFU CFGPSFͷҐஔ5*14EFTDSJCFͷ֎ʹMFUΛग़͞ͳ͍
$్தͰVQEBUF
ྫ͑ɺԿΒ͔ͷมߋ͕͋ΓMFU OVNCFS\^ʹ͢Δ͜ͱʹͳΓ·ͨ͠
lQPJOUz͚͚ͩͯ͘͜Εͳ͍ଞͱҰ༷ʹมߋ͞Εͳ͍ͷͰݟམͱͯ͠͠·͏
$్தͰVQEBUF5*14JUͱ͔ͰVQEBUF͠ͳ͍
%ฒͼॱܥϝιουͷςετ͜Εʹ͍ͭͯRJJUBIUUQTRJJUBDPNOBNJUPQJUFNTCGG⒎FEG
ςετ࣌ؒΛ͘" ςετͷΛݮΒ͢# ແବͳϨίʔυΛ࡞Βͳ͍$ DSFBUFΑΓCVJME% UFTURVFVFΛ͏
"ςετͷΛݮΒ͢ΧόϨοδΛ͏ඞཁ͕͋Δ͔ʁSFRVFTUTQFDΛNPEFMTQFDʹஔ͖͑Εͳ͍͔
#ແବͳΠϯελϯεMFUɺCFGPSFͳͲͰ࡞͍ͬͯͳ͍͔GBDUPSZͰඥ͚͕ଟ͘ͳͬͯͳ͍͔
$DSFBUFΑΓCVJMEDSFBUFϞσϧΦϒδΣΫτ͕ੜͯ͠อଘ͢ΔCVJMEϞσϧΦϒδΣΫτΛੜ͢Δ
% UFTURVFVFHFNIUUQTHJUIVCDPNUNNUFTURVFVFςετΛฒྻ࣮ߦͰ͖ΔσϑΥϧτͷಉ࣮࣌ߦ$16ͷίΞ
·ͱΊ
34QFDશવΒͳͯ͘
αʔϏε͝ͱʹ34QFDͷϧʔϧ͕ಛʹͳͯ͘
؆୯ʹ࣮ݱՄೳͳ࠷ݶͷ
ϝϯςφϯε͍͢͠ςετίʔυʹ͢ΔͨΊͷ৺͕͚
ͨͬͨ̎ͭ
EFTDSJCF DPOUFYU JUΛਖ਼͘͠͏EFTDSJCFͷ֎ʹMFUΛग़͞ͳ͍
͜ͷೋ͕ͭ࠷༏ઌ
͜ΕΛϕʔεʹ
։ൃςετͱͯ͠Ͳ͜·Ͱςετ͢Δ͔NPEFMTQFDͱSFRVFTUTQFDͷॅΈ͚JUͰԿݸFYQFDU͠ͳ్͍தͰVQEBUF͠ͳ͍
جૅ͔Β34QFDΛΓ͍ͨ3TQFDʹΑΔ3BJMTςετೖిࢠॻ੶ͷΈҏ౻३Ұ͞ΜͷRJJUB#FUUFS4QFDT͜ΕಡΈͳ͕Β͕͍͍͔ʮαϤφϥ#FUUFS4QFDT ʯެࣜυΩϡϝϯτ
ͬͱϝϯςφϯε͘͢͠Մಡੑͷߴ͍ςετίʔυΛॻͨ͘Ίͷ͓࡞๏ूIUUQTHJUIVCDPNXJMMOFUSTQFDTUZMFHVJEF