Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]functional test i GuardPlugin
Forum PHP.pl > Forum > PHP > Frameworki
janek9
Witam,

Jestem na etapie testowania mojej aplikacji. Wejscie na strone odbywa sie za posrednictwem sfGuardPlugin. Teraz gdy chce przeprowadzac testy funkcjonalne zupelnie nie mam pojecia jak wpisac w konsoli, aby sfTestBrowser uzyskal dostep do niej, tzn gdzie moznaby bylo wpisac login i haslo zeby sprawdzal dana akcje, a nie wyswietlal tylko formularz logowania..?
lolekk
Hej,

Aby móc przetestować jakaś funkcjonalność, która jest ukryta za formularzem logowania musisz po prostu najpierw się zalogować, czyli wysłać odpowiedni request z danymi do logowania:

  1. $browser->click('Zaloguj', array('login' => array(
  2. 'username' => 'admin',
  3. 'password' => 'admin'
  4. )));
  5.  


Najlepiej utworzyć sobie odpowiednią metodę do tego np.:

  1. class myTestBrowser extends sfTestBrowser
  2. {
  3. public function login()
  4. {
  5. $this->click('Zaloguj', array('login' => array(
  6. 'username' => 'admin',
  7. 'password' => 'admin'
  8. )));
  9. }
  10. }
  11.  


Oczywiście trzeba wcześniej zadbać o dodanie użytkownika testowego przed rozpoczęciem testów.

Mam nadzieję, że nic nie pokręciłem...

Pozdrawiam.
janek9
Cytat(lolekk @ 26.01.2010, 16:15:29 ) *
Hej,

Aby móc przetestować jakaś funkcjonalność, która jest ukryta za formularzem logowania musisz po prostu najpierw się zalogować, czyli wysłać odpowiedni request z danymi do logowania:

  1. [url="./Pobierz-Plik-183233.html"]pobierz[/url], [url="Plaintext-183233.html"]plaintext[/url] [list=1][*] $browser->click('Zaloguj', [url="http://www.php.net/array"]array[/url]('login' => [url="http://www.php.net/array"]array[/url]([*] 'username' => 'admin',[*] 'password' => 'admin'[*] )));[*][/list][PHP] [url="./Pobierz-Plik-183233.html"]pobierz[/url], [url="Plaintext-183233.html"]plaintext[/url]
  2.  
  3. Najlepiej utworzyć sobie odpowiednią metodę do tego np.:
  4.  
  5. [PHP] [url="./Pobierz-Plik-183234.html"]pobierz[/url], [url="Plaintext-183234.html"]plaintext[/url] [list=1][*] class myTestBrowser extends sfTestBrowser[*] {[*] public function login()[*] {[*] $this->click('Zaloguj', [url="http://www.php.net/array"]array[/url]('login' => [url="http://www.php.net/array"]array[/url]([*] 'username' => 'admin',[*] 'password' => 'admin'[*] )));[*] }[*] }[*][/list][PHP] [url="./Pobierz-Plik-183234.html"]pobierz[/url], [url="Plaintext-183234.html"]plaintext[/url]
  6.  
  7. Oczywiście trzeba wcześniej zadbać o dodanie użytkownika testowego przed rozpoczęciem testów.
  8.  
  9. Mam nadzieję, że nic nie pokręciłem...
  10.  
  11. Pozdrawiam.<!--QuoteEnd--></div><!--QuoteEEnd-->
  12.  
  13.  
  14. teraz wyskakuje: " The DOM is not accessible because the browser response content type is not HTML. "
  15.  
  16. mam taki kod w pliku testowym:
  17.  
  18. [php]
  19.  
  20. include(dirname(__FILE__).'/../../bootstrap/functional.php');
  21.  
  22. $browser = new sfTestFunctional(new sfBrowser());
  23.  
  24. $browser->
  25. get('/')->
  26. click('zaloguj', array('signin' => array('username' => 'username', 'password' => 'password)))->
  27. with('request')->begin()->
  28. isParameter('module', 'index')->
  29. isParameter('action', 'index')->
  30. end()->
  31.  
  32. with('response')->begin()->
  33. isStatusCode(200)->
  34. checkElement('body', '!/This is a temporary page/')->
  35. end()
  36. ;
  37.  



a wynik tego jest taki:

  1.  
  2. # get /
  3. # get /login
  4. not ok 1 - request parameter module is index
  5. # Failed test (/usr/share/php5/PEAR/symfony/test/sfTesterRequest.class.php at line 48)
  6. # got: 'sfGuardAuth'
  7. # expected: 'index'
  8. not ok 2 - request parameter action is index
  9. # Failed test (/usr/share/php5/PEAR/symfony/test/sfTesterRequest.class.php at line 48)
  10. # got: 'signin'
  11. # expected: 'index'
  12. not ok 3 - status code is 200
  13. # Failed test (/usr/share/php5/PEAR/symfony/test/sfTesterResponse.class.php at line 257)
  14. # got: 401
  15. # expected: 200
  16. ok 4 - response selector body does not match regex /This is a temporary page/
  17. 1..4
  18. Looks like you failed 3 tests of 4.
  19.  
  20.  



Naprawde nie wiem jak przekazac to do tego formularza..
destroyerr
Czy element zaloguj w który test ma kliknąć prowadzi do strony z formularzem? Jeśli tak to powinieneś normalnie na tą stronę przejść i dopiero z tej strony wysłać ten formularz. Coś takiego:
  1. $browser->
  2. get('/')->
  3. click('zaloguj')->
  4. click('log in (w tym miejscu chodzi o button formularza', array('signin' => array(
  5. 'username' => 'username',
  6. 'password' => 'password')))->
  7. with('request')->begin()->
  8. isParameter('module', 'index')->
  9. isParameter('action', 'index')->
  10. end()->
  11. ;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.