Mocha: - рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЬреВрди 2013  ┬╖  66рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mochajs/mocha

--order рд╡рд┐рдХрд▓реНрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрджреЗрд╢ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рддреАрди рд╡рд┐рдХрд▓реНрдк --order random , --order random:seed , рдФрд░ --order default ред рдкреНрд░рддреНрдпреЗрдХ рд░реИрдВрдбрдорд╛рдЗрдЬреНрдб рд╕реБрдЗрдЯ рдЙрд╕ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

RSpec рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд░рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИред рдореЛрдЪрд╛ рдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдЙрдирдХреЗ --order рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рд╣реИрдВ: http://blog.davidchelimsky.net/2012/01/04/rspec-28-is-released/

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

feature help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрд╕рд╛рди to avoid cross-test dependencies without help of tooling , рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдореЗрдВ рдПрдХ рдмрдЧ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдПрдХ рдмрдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдЗрди рдмрдЧреЛрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреЗрд╕реНрдЯ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреНрд░реЙрд╕-рдЯреЗрд╕реНрдЯ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЯреВрд▓реАрдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

@ рд╕рдВрд╢реЛрдзрди, рдХреГрдкрдпрд╛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕рднреА 66 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

meh, рдЯреВрд▓реАрдВрдЧ рдХреА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рдкрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрд╕рд╛рди to avoid cross-test dependencies without help of tooling , рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдореЗрдВ рдПрдХ рдмрдЧ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдПрдХ рдмрдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдЗрди рдмрдЧреЛрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреЗрд╕реНрдЯ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреНрд░реЙрд╕-рдЯреЗрд╕реНрдЯ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЯреВрд▓реАрдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

@ рд╕рдВрд╢реЛрдзрди, рдХреГрдкрдпрд╛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

+1 @ рдЬреНрдЮрд╛рдиреЛрд╡рд┐рдХред рдореИрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдПрдХ рдмреАрдЬ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ CI рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

@ рд╕рдВрд╢реЛрдзрди , рдореЛрдВрдЧреЛрдЬрд╝ рдореЙрдбрд▓ рдХреНрд░реЙрд╕-рдЯреЗрд╕реНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред mongoose.model 'User', UserSchema mongoose.models рдХреА рд╕рд░рдгреА рдкрд░ рдПрдХ рдореЙрдбрд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рддреЛ рдпрд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ mongoose.models рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ Comment.find().populate('_user').exec(cb) рд▓реЗрдВред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░реАрдХреНрд╖рдг рдЯрд┐рдкреНрдкрдгреА рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрднрд╡рддрдГ require('./models/user') (рдпрд╛ рдХреБрдЫ), рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ mongoose.models рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЯрд┐рдкреНрдкрдгреА рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ Schema hasn't been registered for model "User" ред рдпрд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреАрдЖрдИ рд╕реЗ рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рдПрдкреАрдЖрдИ рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдлрд╛рдЗрд▓ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрд░реЙрд╕ рдлрд╛рдЗрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдереАред

рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП ('./ рдореЙрдбрд▓ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛') (рдпрд╛ рдЬреЛ рднреА) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ mongoose.models рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рддрдм рднреА рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдореБрдЦ рдУрд╡рд░рдХрд┐рд▓ рд╣реИ, рдореЛрдЪрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдлреВрд▓рд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рдереА рддреЛ рд╢рд╛рдпрдж рдпрд╣ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рдмреЛрдЭ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреЛрдб рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪреАрдЬреЛрдВ рдХреА рддрд░рд╣, рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЕрдирд╛рдпрд╛рд╕ рд╣реА рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдХрдард┐рди рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рднреА рд╣реИ (рдпрд╛рдиреА рдорд┐рд╢реНрд░рд┐рдд рдЕрдиреБрднрд╡ рд╡рд╛рд▓реА рдЯреАрдореЗрдВ) рддреЛ рдпрд╣ рд╣реЛрдиреЗ рдХреА рдкреВрд░реА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ :)

рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХреБрдЫ рдкреАрдкреАрдПрд▓ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рдФрд░ рдмрд╣реБрдд рд╕реЗ рдпрд╣ рдорд┐рдирд┐рдЯреЗрд╕реНрдЯ рдХреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ)ред рдпрджрд┐ рдпрд╣ рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

+1 рд░реБрдЪрд┐ред

рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рд╣реЛрдЧрд╛! рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдирд╛рдо, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдмрджрд▓рдХрд░ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдПред

+1 рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ

: +1:

: +1:

+1 рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдХрдореА рд╣реИред

rspec рд╢рдмреНрджрд╛рд░реНрде рдмрд╣реБрдд рдареЛрд╕ рд╣реЛрддреЗ рд╣реИрдВ: рдЖрдк рдПрдХ рдСрд░реНрдбрд░ рдмреАрдЬ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдмреАрдЬ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдирддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдпрд╣ рдЕрдХреНрд╕рд░ рдХреНрд░реЙрд╕-рдЯреЗрд╕реНрдЯ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдХрднреА-рдХрднреА рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ 50% рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЬреЛ рдореЛрдЪрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рдпрджрд┐ рдХреНрд░рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдЧрд╛ред рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЖрджреЗрд╢ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ:

https://github.com/visionmedia/mocha/blob/master/test/hook.async.jn##95
https://github.com/visionmedia/superagent/blob/master/test/node/not-modified.js#L31

рдЗрди рджреЛрдиреЛрдВ рдХреЛ http://visionmedia.github.io/mocha/ рдкрд░ рдЕрдиреБрдХрд░рдгреАрдп рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдореБрджреНрджреЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рдмрд┐рддрд╛рдпрд╛ред

рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрд░реЙрд╕-рдЯреЗрд╕реНрдЯ рдбрд┐рдкреНрд╕ w / o рдЯреВрд▓реАрдВрдЧ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдордп рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред

рдЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реВрдЯ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг рдЧреИрд░-рддреБрдЪреНрдЫ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд╕реВрдЯ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдХреЗ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред _Tests_ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдирдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рд╣реЛрдЧреА, рдЙрдиреНрд╣реЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдкреАрдЫреЗ рдХреА рдУрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рд╕реЗ before() рдФрд░ after() рд╣реБрдХ рдХреБрдЫ рд╣рдж рддрдХ рдирд┐рд░рд░реНрдердХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЯ рдореЗрдВ _n_ рдмрд╛рд░ рдкреНрд░рддрд┐ _n_ рдкрд░реАрдХреНрд╖рдг рдорд┐рд▓реЗрдЧрд╛ (рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ рдХрд┐ _worst_ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ ), рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрджрд░реНрдн рдмрджрд▓рддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЬреБрд░реНрдорд╛рдирд╛ рд▓рдЧрд╛рдПрдЧрд╛ред

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рдмреАрдЬреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд░рдирд╛ рддреБрдЪреНрдЫ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрддреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рддрд╛рдХрд┐ рдкрддреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдмреЗрд╢рдХ, рдореИрдВ рдпрд╣ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЬреЛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдХреНрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ "рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реВрдЯ" рдпрд╛ "рд╕реВрдЯ рдХреЗ рднреАрддрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдкрд░реАрдХреНрд╖рдг" рдпрд╛ рджреЛрдиреЛрдВ рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк describe() рдмреНрд▓реЙрдХ _A_ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд┐рд╕реА рднреА рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ describe() рдмреНрд▓реЙрдХ _B_ рддрдХ _A_ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рдЪреБрдХреЗ рд╣реИрдВ (рдЬреЛ рдЕрдзрд┐рдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ before() / after() ) рдХреЗ рд╕рд╛рде рд╣реАрдирддрд╛ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред)

рдЬреЛ рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рд╣реИрдВ) рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ:

  • рдирд┐рдореНрдирддрдо рд╕реНрддрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд░реЗрдВ: рдПрдХ рдПрдХрд▓ рд╡рд░реНрдгрди рдмреНрд▓реЙрдХ рдХреЗ рднреАрддрд░; рдлреЗрд░рдмрджрд▓ "рдпрд╣" рдмрдпрд╛рдиред
  • рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рд╕реВрдЯреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд░реЗрдВ (рдпрд╛ рд▓реЛрдб рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд░реЗрдВ)

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрддрд░реЛрдВ рдкрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдлреЗрд░рдмрджрд▓ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдореВрд▓реНрдп рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╣реИрдХ, рд▓реЗрдХрд┐рди рдирд┐рдореНрдирддрдо рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ https://github.com/syrnick/mocha/compare/random_order?expand=1&w=0

mocha - fail
connect - pass
superagent - fail
express - pass** 
websocket.io - pass (can't tell for sure)

** рдореБрдЭреЗ рдкреВрд░реЗ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдХреЗ 100 рд░рдиреЛрдВ рдореЗрдВ рд╕реЗ 2 рд░реБрдХ-рд░реБрдХрдХрд░ рдЕрд╕рдлрд▓рддрд╛ рдорд┐рд▓реАред

рдареАрдХ рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИ!

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реАрдбрдмреНрд░реИрдВрдбрдо рд▓рд┐рдм рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛; pass рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдореИрдВ рд╕рдВрднрд╡рддрдГ рдЙрд╕ рдХреЛрдб рдХреЛ рд╕рд╛рдл рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдЕрдЧрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реВрдВрдЧрд╛ред рдХреНрдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╣реИ? рдореИрдВ рд╕рдВрднрд╡рддрдГ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascriptред

@boneskull рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рдЖрдкрдХреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред : +1:

рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ "рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реВрдЯ" рдпрд╛ "рд╕реВрдЯ рдХреЗ рднреАрддрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдкрд░реАрдХреНрд╖рдг" рдпрд╛ рджреЛрдиреЛрдВ рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╕рднреА рддрд░рд╣ рд╕реЗ рдиреАрдЪреЗ, рдШрдиреАрднреВрдд рдФрд░ рдлреЗрд░рдмрджрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕реБрдирдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ rspec рдиреЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлреЗрд░рдмрджрд▓ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рд╣реИ? рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЙрдирдХреЗ рдХреЛрдб рдкрд░?

рдордВрдЧрд▓рд╡рд╛рд░ 26 рдЕрдЧрд╕реНрдд 2014 рдХреЛ, рдпрд╣реЛрд╢реВ Appelman рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@boneskull https://github.com/boneskull рдореИрдВ рдЖрдкрдХреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ
рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред [рдЫрд╡рд┐:: +1:]

рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ "рд░реИрдВрдбрдорд╛рдЗрдЬрд╝ рд╕реВрдЯ" рдпрд╛ "рд░реИрдВрдбрдорд╛рдЗрдЬрд╝ рдЯреЗрд╕реНрдЯ" рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рд╕реВрдЯ "рдпрд╛ рджреЛ рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрдиред

рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдиреАрдЪреЗ рд╕рднреА рддрд░рд╣ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ,
рдЧрдгрдирд╛ рдХрд░рдирд╛ рдФрд░ рдлреЗрд░рдмрджрд▓ рдХрд░рдирд╛ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/visionmedia/mocha/issues/902#issuecomment -53482124ред

@ рд╕рд╛рдЗрд░рдирд┐рдХ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдХреЛ рдЗрддрдиреЗ рдмрдбрд╝реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп seedrandom ред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕реАрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗред seedrandom рдЖрдкрдХреЛ рдПрдХ рдмреАрдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдмреАрдЬ рд▓реМрдЯрд╛рдПрдЧрд╛ред рддрдм рд╣рдо рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд▓рд╛ RSpecред

@syrnick рдЖрдкрдХрд╛ рдорди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдмреАрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкрддреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ "рдкреНрд░рджрд░реНрд╢рди рдпреЛрдЧреНрдп" рди рд╣реЛрдВред рдореИрдВ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛, рдпрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ ...

+1

рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЖрджреЗрд╢рд┐рдд рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП +1 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

@syrnick рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рдзрдиреНрдпрд╡рд╛рджред

рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рддрддреНрдХрд╛рд▓ рдИрдЯреАрдП рдирд╣реАрдВ рд╣реИред

: +1:, рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрднреА рднреА рдПрдХ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдорджрдж рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд┐рд╢рд░-рдпреЗрдЯреНрд╕ рдлреЗрд░рдмрджрд▓ рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рджреВрд╕рд░рд╛, рдореЗрд░реЗ рдкрд╛рд╕ --order random , --order random-suites , рдФрд░ --order default рддреАрди рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ :<seed> ред

+1ред рдмрд╕ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЕрдЧрд░ рдкрд░реАрдХреНрд╖рдг рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд┐рдП рдЧрдП рдереЗред RSpec рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рдорд╛рдиред

рдпрд╣рд╛рдВ рдХреБрдЫ рдХреЛрдб рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдЖрджреЗрд╢ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдпрд╣ рдПрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА TDD рдбреЗрдореЛ рдХреЗ рджреМрд░рд╛рди рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдЙрд▓рдЯ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рд╣рдореЗрд╢рд╛ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

game.js:

var express = require('express');
app = exports.app = express();

var sum = 0;

app.post('/bowl/:pins', function(req,res) {
    var score = parseInt(req.params.pins);
    console.log('Bowled ' + score);
    sum += parseInt(req.params.pins);
});

app.get('/score', function(req,res) {
    console.log('Sum: ' + sum);
    res.send(sum + '');
});

app.listen(process.env.PORT || 3000);

рдкрд░реАрдХреНрд╖рдг \ gameTest.js:

var request = require('supertest'),
    should = require('should'),
    game = require('../game.js').app;

describe('a game of bowling', function() {
    describe('a gutter game', function() {
        it('should score 0', function(done){
            request(game).get('/score').expect(200, '0', done);
        });
    });

    describe('a single pin game', function() {
        it('should score 20', function(done){
            for(var i = 0; i < 20; i++) {
                request(game).post('/bowl/1').expect(200, done);
            }
            request(game).get('/score').expect(200, '20', done); 
        });
    });
});

рдореБрдЭреЗ рдЗрд╕реЗ рд░рдЦрдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛрдЧреАред

: +1:

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдХреБрдЫ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ (рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рддреЛ рдпрд╛рдж рд░рдЦреЗрдВ), рд╕рд░реНрд╡рд░ рдХреЙрд▓ рд╕реЗ рд╣рдЯрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ DOM рд╕реЗ рдЪреАрдЬреЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд / рд╣рдЯрд╛рдПрдВ, рдпрд╣ рдЖрджреЗрд╢-рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП _very_ рдЖрд╕рд╛рди рд╣реИред рдкрд░реАрдХреНрд╖рдг рдХреНрд░рдо рдХреЛ рд░реИрдВрдбрдо рдХрд░рдиреЗ рд╕реЗ рдмрд╛рдж рдХреА рдмрдЬрд╛рдп рдкрд╣рд▓реЗ рдЗрди рдХреА рдЦреЛрдЬ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред
: +1:

: +1:

: +1:

+1

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░реИрдВрдбрдо рдСрд░реНрдбрд░, рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреАрдЬ рдХреЗ рд╕рд╛рде рдСрд░реНрдбрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдбрд╝реА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреАред

+1 рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдкрд░ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХрднреА-рдХрднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ ...

рдЗрд╕ рдмреАрдЪ рдореЗрдВ, рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреНрд╕ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ):

mocha `ls -1 test/*.js | sort --random-sort `

рдореЛрдЪрд╛ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЯреЗрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдвреВрдВрдврдирд╛ рдкрдбрд╝рд╛ред рд░реИрдВрдбрдорд╛рдЗрдЬреЗрд╢рди рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ, рдбрд┐рдлреЙрд▓реНрдЯ рд░рди рдСрд░реНрдбрд░ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╡рд╣ рдХреНрд░рдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ?

: +1:

@danielabar рд╣рд╛рдБ, рд╡реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред

@ рдирд┐рдХреЛрд▓рд╕ рдЬреИрдХреЛрдм рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рд╕рдВрднрд╡ рд╣реИ, btwред :)

$ seq 10 | shuf --random-source=<(yes 2883)
1
7
3
4
6
2
10
5
9
8

https://github.com/bahmutov/rocha рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@boneskull whilst рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдореБрджреНрджрд╛ рд╣реИ, рдХреНрдпрд╛ PR Please рд▓реЗрдмрд▓ рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЕрдЧрд▓реЗ рджрд┐рди рдХреБрдЫ рди рдХреБрдЫ рдпреЛрдЧрджрд╛рди рдорд┐рд▓реЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЛрдЪрд╛ рдХреЛрд░ рдХреЛ рдиреНрдпреВрдирддрдо рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ, рдЯреАрдо рдХрдИ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдХрд░ рд░рд╣реА рд╣реИред рдореЛрдЪрд╛ рдХреА рдЕрдЧрд▓реА рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдкреНрд▓рдЧ-рдпреЛрдЧреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдХреНрдпрд╛ рдореИрдВ рд╕рд┐рд░реНрдл https://github.com/bahmutov/rocha рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЕрджреНрднреБрдд рд╕реЙрд╕

рдкреНрд▓рдЧ-рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ? рдХреНрдпрд╛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдЖрджреЗрд╢ рдкреЗрд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?

рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП +1

@sulabhjain , рдкрд┐рдЫрд▓реЗ рдФрд░ рдмрд╛рдж рдХреЗ рд╕рдорд░реНрдердХреЛрдВ, рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп +1 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЗрд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рдкреНрд░рдЧрддрд┐ред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП +1

рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рд╣рд░ рдкреНрд░рдореБрдЦ JVM рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдореЗрдВ рдпрд╣ рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП +1ред рд╣рд╛рдВ, рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрднрд╡ рдФрд░ / рдпрд╛ рдЕрдХреЗрд▓реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдмрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рд╢рд╛рдЦрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкреАрдЖрд░ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬреЛ рдмрдЪрд╛ рд╣реИ рдЙрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП +1ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдЦрд╛ рдЪрд▓ рд░рд╣реА рд╣реИред

рдЕрднреА рднреА рдЗрд╕ рдкрд░ рдЗрдВрддрдЬрд╛рд░ :))

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
@ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдмрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдХреМрд╢рд▓ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдк рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдЯрдХрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рднреА рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рддрдм рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдк рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреНрд░реАрд╡рд┐рдУрд╕ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИред

@boneskull рдорд╣рд╛рди рдХрд╛рдо! рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рдорджрдж рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ?

рдореИрдВ рдмрд╕ рдЕрдкрдиреЗ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдореЛрдЪрд╛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

mocha $(find tests/ -name *.spec.js | shuf)

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рднреАрддрд░ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдлреЗрд░рдмрджрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдЪрд╛рд▓рд╛рдХ рдФрд░ рдЖрд╕рд╛рди рд╣реИ!

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ +1

рдпрд╣ рдЕрднреА рднреА рдореЗрдЬ рдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ

рддреЛ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдмрдЪрд╛ рд╣реИ? рдореИрдВ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд Would рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

рдореБрдЭреЗ рд╕рд┐рд░реНрдл choma рдкреИрдХреЗрдЬ рдорд┐рд▓рд╛, рдЬреЛ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдФрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдЪрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреНрд▓рдЧрдЗрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд░реЛрдЪрд╛ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк, рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд░рд▓ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддреА рд╣реИ!

рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛:

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jmiller-airfox picture jmiller-airfox  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

seelikes picture seelikes  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Aarbel picture Aarbel  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

3p3r picture 3p3r  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

luoxi001713 picture luoxi001713  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ