Simple Test modul használata

Laszlo1818 képe

Sziasztok,

Szakdolgozatomban szeretném használni tesztelés során a drupalnak a Test modulját. Sajnos eddig még sehogy nem jöttem rá, hogyan lehetne működésre bírni. Bekapcsoltam a test modult és a simpletest example modult is. De olyat említ ez az https://drupal.org/simpletest-tutorial-drupal7 oldal, hogy node/add/simpletest-example tudnom kellene ilyet csinálni, meg kellene lenni Configuration > Development > Testing page- nek ahol ezt le lehetne futtatni de ilyen nincs sajnos. A legnagyobb probléma az, hogy ezeknek az okát nem tudom.
Próbálkoztam mással is, hogy a node.test-be beleírom a saját tesztjeim.
Megtaláltam a node.test fájlt és oda írtam egy egyedi kódot ezt alul láthatjátok, de ha ez megvan akkor hogyan tudnám lefuttatni ezeket a teszteket, mert magától nem fut le, cache ürítés után sem.

A kódom(a kiemelt rész direkt hibás rossz tábla van megadva):

  1. class NodeRuleCreateTest extends NodeWebTestCase {
  2.  
  3. public static function getInfo() {
  4. return array(
  5. 'name' => 'Node expression create',
  6. 'description' => 'Node expression create',
  7. 'group' => 'Node'
  8. );
  9. }
  10.  
  11. function setUp() {
  12. parent::setUp(array('node_test'));
  13. }
  14.  
  15. /**
  16.   * Create a "Basic page" node and verify its consistency in the database.
  17.   */ // <-Ezt a sort én raktam bele -pp-
  18. function testRuleCreateChange() {
  19. $web_user = $this->drupalCreateUser(array('create page content', 'edit own page content'));
  20. $this->drupalLogin($web_user);
  21.  
  22. <strong><h3>$epid = db_insert('nar_rules_expressio')</h3></strong>
  23. ->fields(array(
  24. 'nar_rule_expr_nid' => '1',
  25. 'nar_rule_expr_value' => '(A1A) AND (A2A)',
  26. 'nar_rule_type' => 'R',
  27. 'nar_rule_expr_active' => '1',
  28. ))
  29. ->execute();
  30. $entity_rule = entity_load('entity_rule', array($epid));
  31. $this->assertTrue($entity_rule, 'Jött vissza adat.');
  32. $this->assertTrue(count($entity_rule) == 1, 'Egy elem jött vissza.');
  33. $this->assertTrue(isset($entity_rule[$epid]->nar_rule_expr_value), 'Van nar_rule_expr_value tulajdonsága.');
  34. $this->assertTrue($entity_rule[$epid]->nar_rule_expr_value == '(A1A) AND (A2A)', 'Az van benne amit beleraktunak.');
  35. }
  36. }
Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
pp képe

Hibalehetőség 1.

simpletest (testing) modul be van kapcsolva?

Mert akkor kell lennie Configuration > Development > Testing page-nek.

Hibalehetőség 2.
Ha magyar localizációval rendelkezel, akkor a Próba menüpontot kell keresned a Fejlesztés menüben. :)

Ha ez megvan, akkor tudod futtatni a már létező teszteket. Ezután jöhet az, hogy írsz egyet.

pp

1
0
Laszlo1818 képe

Szia,

Sajnos valami nagyon elromlott ezért újra raktam a drupalt és így aktiválódott már egyből. Probálok megírni hasonló test eseteket tiédhez hasonlóan de sajnos nem nagyon akar lefutni valamikor időtulépés miatt hal el, valamikor pedig azért, mert a olyan táblába akar menteni ami nincs is és simple_test a vége.
Az example modul segítségével szerinted a felsőhöz hasonló testet le lehetne futtatni?

Üdv,
Laci

0
0
pp képe

Szia!

A simpletest arra való, hogy ha van egy modulod, akkor annak a működését le tud tesztelni. Alapvetően integrációs tesztekre lehet használni, bár van Unit test lehetőség is, de az szörnyen lassú(tdd-re pl. használhatatlan), lévén a test futtatásához bootstrap-el egy Drupalt. (a web teszthez minimumkettőt és az elsőn kívül az összeset újrainstallálja... egy jó könyvet készíts ki amit olvasgatni fogsz közben. :))

Tipikus megoldás, hogy a modul könyvtárában van egy, vagy több .test kiterjesztésű állomány, amiben a tesztek vannak, és ezek mindegyike fel van véve az .info fájl files[] tömbjébe. Ha nincs, nem fogod tudni futtatni.

Ekkor már tudsz olyan tesztet csinálni, hogy:

  1. class NullTestCase extends DrupalWebTestCase {
  2. public static function getInfo() {
  3. return array(
  4. 'name' => 'NULL',
  5. 'description' => 'Null test case aka "Hello World!"',
  6. 'group' => 'Example',
  7. );
  8. }
  9. }

Ez semmit nem csinál, és még teszteset sincsen benne, ellenben megjelenik a futtató felületen és le tudod futtatni. (aminek hatására kiírja, hogy nincs teszt amit futtathat.)

Ebbe az osztályba, ha bedobod a következő függvényt:

  1. public function testNullTestCase() {
  2. $this->pass('Works aka Muxik');
  3. }

Akkor már jó hosszan fog futni a teszted, mert nem csak egy Drupal-t bootstrapel, mint az előbb, hanem még fel is telepít egyet a nem látható, testing profillal. Ezt a Drupal-t ugyan abba az adatbázisba installálja, mint ahol a másik van, csak táblaprefixel (legalább is mysql-nél, sqlite-nál picit máshogy működik, vagyis nem igazán működik)

Ha egy teszt elhal, akkor telis-tele lesz az adatbázisod ilyen táblákkal, ezért néha érdemes rátolni "Clean environment"-et.

Ha ez megvan, akkor jöhet az, hogy a saját modulod függvényeit hívogatod. Ehhez már kell egy setup függvény is:

  1. public function setUp() {
  2. // Enable any modules required for the test.
  3. parent::setUp('azenmodulom');
  4. }

A Te példádban a node_test modul töltené be, bár kétlem, hogy lenne ilyen modul, szóval ez biztos nem fut ez a teszt.

Itt minden olyan modult be kell töltened, ami kell a teszthez. Minél több modult töltesz be annál lassabb lesz a teszted. :)

További információkért lásd az eredeti doksit: http://drupal.org/simpletest

2
0