Testowanie AppModel

Mam kilka metod w AppModel, potrzebowałem pokryć je testami. Różni się to nieco od testowania zwykłych modeli.

Najpierw analogicznie do innych testów stworzyłem app_model.test.php:

App::import("model", "AppModel");

class AppModelTest extends CakeTestCase {
   var $name = "AppModel";
     
   function start() {
      parent::start();
      $this->AppModel = ClassRegistry::init("AppModel");
   }

Problem w tym, że dostaniesz wtedy Missing Database (“app_models”).

Nie możesz w AppModel ustawić atrybutu useTable na false, bo wszystkie modele go dziedziczą. Tzn. jest to możliwe, ale w takim wypadku we wszystkich modelach, które jednak są połączone z tabelami w bazie należałoby explicite podać $useTable = ‘nazwa_tabeli’

Odeszlibyśmy wtedy od Convention over Configuration, poza tym za dużo roboty. Ale można zastosować trick. Stworzyć klasę, która “zasłoni” naszą AppModel, ale będzie działać tak samo (nazywa się to Mock Classes, albo Mock Objects, albo i tak, i tak na pewno ;)):

App::import("model", "AppModel");

class DummyAppModel extends AppModel {
  var $useTable = false;
}

class AppModelTest extends CakeTestCase {
   var $name = "AppModel";
     
   function start() {
      parent::start();
      $this->AppModel = ClassRegistry::init("DummyAppModel");
   }

I będzie działać :)

Share Button

Leave a Reply

Your email address will not be published. Required fields are marked *