рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдкрд░реАрдХреНрд╖рдг рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рддреЛрдбрд╝рдиреЗ" рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдХрдИ рдЗрдВрдЯрд░рдХрдиреЗрдХреНрдЯреЗрдб рдШрдЯрдХреЛрдВ рд╕реЗ рдпреБрдХреНрдд рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ, рд╕рдмрд╕реЗ рдЖрдо рдЬрдореАрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╣рдордиреЗ рдЧреЛ рдкрд░ рдПрдХ рдШрдЯрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрдЪреНрдЫреЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдФрд░ рдХреИрд╕реЗ рд╣рдордиреЗ рд░реВрдмреА рдореЗрдВ рд░реВрдмреА рдореЗрдВ рдЖрд░рдПрд╕рдкреАрдИрдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рддрдХрдиреАрдХ рд╕реНрдЯреИрдХ рдкрд░ рдЬрд╛рдПрдВ
рдИрдЯреАрдИрдПрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд╣рд╛рдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддрд╛, рд░рд┐рдкреЛрд░реНрдЯ рдЬрдирд░реЗрдЯрд░ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдз рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╣рдо рдПрдХреАрдХреГрдд рд╣реИрдВред
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕рд╕реНрддреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдПрдХ рдЕрдЦрдВрдб рдЖрд╡реЗрджрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдЙрд╕рдиреЗ рдПрдХ рдмрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рдпрд╛ рдЬрдм рдХреЛрдб рдХреЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдЗрд╕рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдШрдЯрдХреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдкрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рднреА рдерд╛ред рдкреНрд░рддрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди Ngnix рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реИ, рдФрд░ рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд▓реЛрдб рдмрдврд╝рддрд╛ рдЧрдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдХрдИ рднрд╛рд░реА рдкреГрд╖реНрда рдЦреЛрд▓рдирд╛, рдореБрдлреНрдд рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдзреАрдорд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧрд┐рд░ рдЧрдпрд╛ред
рдЗрди рдЬреЛрдЦрд┐рдореЛрдВ, рд╕рд╛рде рд╣реА рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреА рдкрд░рд┐рдкрдХреНрд╡рддрд╛ (рдорд╣реАрдиреЛрдВ рддрдХ рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛) рдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рдЙрдореНрдореАрджрд╡рд╛рд░ рдмрдирд╛ рджрд┐рдпрд╛ред
рдЗрд╕ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдХреЛ рдЧреЛ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдЙрд╕реЗ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рд╛рдЭрд╛ рдХрд░рдиреА рдереАред рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд░реЗрд▓ рдХреЗ рд╕рд╛рде рдмрдиреА рд░рд╣реАред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рдЖрдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд╛рд▓реА рдРрд╕реА рдпреЛрдЬрдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬрдмрдХрд┐ рдХреЗрд╡рд▓ рджреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛:

рд╕реЗрд╡рд╛ рдХреЛ рд░реЗрд▓ рд╕реЗ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдФрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм, рд░реЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреНрд╡реЗрд░реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред рд╕реЗрд╡рд╛ рдиреЗ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реАрдзреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛, Ngnix рдХреЗ рдмрд┐рдирд╛, рдереЛрдбрд╝реА рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдиреНрдпреВрдирддрд░ рдерд╛ред
рдЧреЛ рдореЗрдВ рд╣рдорд╛рд░реА рдпреВрдирд┐рдЯ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛
рдпреВрдирд┐рдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЧреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЙрдирдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓реЙрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЕрдиреНрдп рддрд░реНрдХреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдереЗ: рдореБрдЦреНрдп рдореЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧреЛ-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА "рдЦреБрдж" рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдзреЗ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЖрдзреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдз рд╢рд╛рдорд┐рд▓ рдереЗ, рдФрд░ рдпрд╣ рдЖрдзрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдерд╛ред рд░реВрдмреА рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдЧреЛрдИ рдореЗрдВ рдореЛрдХреА рдХрдо "рдкрдардиреАрдп" рд▓рдЧрддреА рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд┐рдП рдЧрдП рдЧрд┐рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЛрдХреА рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдирддреАрдЬрддрди, рдРрд╕реА рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЕрдкреНрд░рднрд╛рд╡реА рдФрд░ рдмреЗрд╣рдж рдирд╛рдЬреБрдХ рдереЗред
рд╕рдорд╛рдзрд╛рди рд╡рд┐рдзрд┐
рдЗрди рдХрдорд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдерд┐рдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдФрд░ рдЧреЛ рдкрд░ рдПрдХ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдПрдХ рд╕рдлреЗрдж рдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд░реВрдмреА рд╕реЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рднреА рдЗрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде, рд╕реЗрд╡рд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдпрд╣ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдзрд┐ рдХреЛ рдЧреАрд▓рд╛ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рдерд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд▓реЙрдХ рдХрд░рдирд╛ рднреА рдЕрд╕рдВрднрд╡ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдкрдХрдбрд╝рдиреЗ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЖрд╡реЗрджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдмрд┐рди рдЬреИрд╕рд╛ рдХреБрдЫ, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдиреАрдпред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓рд┐рдЦреА рдереА, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдирд┐рдХрд▓реА рд╣реИ:
- rspec рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЪрд▓рддреЗ-рдЪрд▓рддреЗ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЯреЗрд╕реНрдЯ рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдФрд░ HTTP рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреЛрд░реНрдЯ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 8082
- рдкреЛрд░реНрдЯ 8083 рдкрд░ рдЙрд╕ рдкрд░ рдкреНрд░рд╛рдкреНрдд HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рднреА рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рд╣реИ
- рд╣рдо RSpec рдкрд░ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдмрдирд╛рдПрдВ рдФрд░ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ: 8082, рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП HTTParty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- рдкрд╛рд░реНрд╕рд┐рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛; рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ; рд╣рдо "RequestBin" рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг:
рдЕрдм рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ, рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдИ рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рджреЗрдВ: "TheService" рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рдПрдВ:
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛ рдХрд┐ Rspec рдореЗрдВ рдЗрд╕реЗ "рд╕рдорд░реНрдерди" рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдСрдЯреЛрд▓реЙрдб рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
Dir[Rails.root.join('spec/support/**/*.rb')].each {|f| require f}
рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐:
- рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗ TheService рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ Git рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЙрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпреЗ рд╡рд┐рд╖рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ рддрд╛рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рди рд╣реЛред
- рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ "go run {path to main.go} {path to config}" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдЪрд▓рд╛рддрд╛ рд╣реИ
- рд╣рд░ рд╕реЗрдХрдВрдб рдорддрджрд╛рди, рдпрд╣ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛрддреЗ
- рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреБрдирдГ рдЖрд░рдВрдн рди рд╣реЛ рдФрд░ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛред
рд╕реНрд╡рдпрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
#/spec/support/the_service_config.yml server: addr: 127.0.0.1:8082 db: dsn: dbname=project_test sslmode=disable user=postgres password=secret redis: url: redis://127.0.0.1:6379/1 rails: main_go: /home/me/go/src/github.com/company/theservice/main.go recorder_addr: 127.0.0.1:8083 env: PATH: '/home/me/.gvm/gos/go1.10.3/bin' GOROOT: '/home/me/.gvm/gos/go1.10.3' GOPATH: '/home/me/go'
рд╕реНрдЯреЙрдк рд╡рд┐рдзрд┐ рдмрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХрддреА рд╣реИред рдирдИ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдгрд┐рдХ "рдЧреЛ рд░рди" рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рдЪрд▓рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдИрдбреА рдЕрдЬреНрдЮрд╛рдд рд╣реИред рдпрджрд┐ рдЖрдк рдорд╛рдгрд┐рдХ рд╕реЗ рд╢реБрд░реВ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, рддреЛ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдкрдиреЗ рдЖрдк рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдкреЛрд░реНрдЯ рд╡реНрдпрд╕реНрдд рд░рд╣рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣ ID рджреНрд╡рд╛рд░рд╛ рд░реЛрдХ рд╣реЛрддреА рд╣реИ:
рдЕрдм рд╣рдо рдПрдХ рд╕рд╛рдЭрд╛_рд╕рдВрдХреЗрдд рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдБ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рддреЛ TheService рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ VCR рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ (рдЙрдирдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдо рдПрдХ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рд╕реЗ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ):
рдФрд░ рдЕрдм рдЖрдк рд╕реНрд╡рдпрдВ рдЪрд╢реНрдорд╛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
TheService рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ HTTP рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рднреА рд╣реИ, рдпрд╣ "TheServiceControl" рд╡рд░реНрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрд╕ рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдиреНрд╕
рдЧреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рд╕рднреА рд▓реЙрдЧ рдФрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА STDOUT рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛред рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░, рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЬрдм Rspec рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдбреАрдмрдЧрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдРрдирдХ рдЪрдпрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП TheService рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд▓реНрдкрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реЗрд╡рд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдЗрд╕реЗ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдЖрдИрдбреАрдИ рдореЗрдВ рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХрд▓реНрдкрдирд╛ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░ рджреЗрдЧреА, рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдлреЗрдВрдХ рджреЗрдВрдЧреЗ, рдпрд╣ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдк рдЙрдкрджреНрд░рд╡ рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдмреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ TDD рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдХрднреА рднреА рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдЧреЛ рдкрд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЪрд╢реНрдорд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИрдВ, рдФрд░ рд╕реЗрд╡рд╛ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЬреНрдЮрд╛рди рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╣рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рддреЛ рд╣рдореЗрдВ рд░реИрдкрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЪрд╢реНрдорд╛ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рджреВрд╕рд░реА рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред