рд╕рдВрд╣рд┐рддрд╛ рез.рез рдЬрд╛рд░реА рдХрд┐рдпрд╛

PHP рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЛрдбреИрд╕реЗрдкреНрд╢рди рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдкрд╣рд▓рд╛ рдмрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдкреВрд░реЗ рдХреЛрд░ рдХреЛ рдлрд╛рд╡рдбрд╝рд╛ рдХрд░рдирд╛ рдерд╛, рд╕рдм рдХреБрдЫ рддреЛрдбрд╝рдирд╛, рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░рдирд╛ рдФрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рддрд╛рдХрд┐ рдкрд┐рдЫрдбрд╝реЗрдкрди рдХреЛ рди рддреЛрдбрд╝ рд╕рдХреЗред рдирддреАрдЬрддрди, рдЕрдм рдХрд┐рд╕реА рднреА PHP рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рди рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, XPath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ PHPUnit рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХреЛрдбрдкреНрд╢рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рджрд┐рдЦрд╛рдИ рджреА рд╣реИред

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ , рдЦрд╛рдмрд░реЛрд╡рд╕реНрдХ рдирд┐рд╡рд╛рд╕реА рд╡рд░реНрдЧрд░реНрдЯ рдиреЗ рдкреВрдЫрд╛: "рдХреНрдпрд╛ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

$token = $I->grabTextValueFrom('#token'); $I->fillField('token', $token); 

рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╡рд┐рд╢реЗрд╖ рдЯреАрдореЛрдВ - рдзрд░рдиреЗрд╡рд╛рд▓рд╛ ред рд╡реЗ рд╕рднреА рдЙрдкрд╕рд░реНрдЧ "рд╣рдбрд╝рдкрдиреЗ" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЕрдм рд▓рдЧрднрдЧ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рддреЛ рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдХрдо рдмрд╛рд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рддреБрд░рдВрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм рдХрд┐рд╕реА рднреА PHP рдХреЛрдб рдХреЛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдкрд░реАрдХреНрд╖рдг рдХреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреЗ рджреЗрдВ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдЦреНрдд рдирд┐рдпрдореЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкрдардиреАрдпрддрд╛ рдЦреЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдЦреНрдд рдирд┐рдпрдо рдмрдиреЗ рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди PHP рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреБрдбрд╝рдирд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдХрд░рддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 <?php if ($scenario->preload()) { require 'user_data.php' } $I = new TestGuy($scenario); $I->amLoggedAs($user1); $I->click('Log In'); $I->see("Hello, ".$user1->name); if ($scenario->running()) { $user1->delete(); } ?> 

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ $ user1 рдХреЛ user_data.php рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдбрд╕реЗрдкреНрд╢рди рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдгрдиреАрддрд┐ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рд╕рднреА рдбреЗрдЯрд╛ рд╕рдореВрд╣ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд▓реЛрдб рдФрд░ рд╕рд╛рдлрд╝ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЕрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

Refacotring рдХреЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдм PHPUnit рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЖрдк рдХреЛрдбреЗрд╢рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╛рдиреА рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ PHPUnit рдореЗрдВ рд╕рднреА рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 public function testUserIsLoggedIn() { $user = User::find(1); $user->setPassword('qwerty'); $user->save(); $this->testGuy->amOnPage('/login'); $this->testGuy->submitForm('#login', array('username' => $user->name, 'password' => 'qwerty')); $this->testGuy->see('Hello, '.$user->name); } 

рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ ORM рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╡рд╣рд╛рдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдФрд░ рдирд╡рд╛рдЪрд╛рд░ред рдЕрдм рдкрд░реАрдХреНрд╖рдг XPath рд▓реЛрдХреЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рддрддреНрд╡реЛрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдХреЛрдИ рдирдпрд╛ рдЖрджреЗрд╢ рдореМрдЬреВрджрд╛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╣рд╛рдВ CSS рдЪрдпрдирдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдереЗ, рдЕрдм XPath рд▓реЛрдХреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдкрд░реАрдХреНрд╖рдг!
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмреНрд▓реЙрдЧ рдкрд░ рд╡рд┐рд╡рд░рдг рдЬрд╛рд░реА рдХрд░реЗрдВред

Source: https://habr.com/ru/post/In149275/


All Articles