Świetna książka PHP: Hight quality frameworks and applications

Real-Worls Solutions for Developing High Quality PHP Frameworks and Applications

Real-Worls Solutions for Developing High Quality PHP Frameworks and Applications


Świetna dla każdego, kto

  • pracuje na systemach z zaszłościami (Legacy Systems)
  • myśli, że refaktoring takich systemów nie jest możliwy
  • testy automatyczne muszą być równie przyjemne jak hemoroidy
  • boi się, że aplikacja, w którą zainwestował już sporo powoli staje się niemożliwa w utrzymaniu
  • myśli, że system, którego używa od lat trzeba przepisać od zera

Pozycja zdecudowanie nie jest przeznaczona dla tych, którzy zaczynają swoją przygodę z PHP. Jeśli jednak już okrzepłeś i szukasz czegoś więcej – polecam gorąco.

Share Button

build in validation vs. unit testing

If You want to depend on build in model validation, You need to watch out on one pitfall

Let’s assume that there’s Stuff model with this validation:

$validate = array("name" => "notempty"); 

It works perfectly in web forms, but when You are making a unit test:

$this->assertFalse( $this->Stuff->save( array("id"=> 1) ) ); //test fail

Unfortunately it wont work, and the save operation will occur. Why?

Because that validation means that
If You have “name” element in saving array, it will be checked if it’s not empty (not null, nor false or “”)

So, if You need the test to pass, You can do this:

$this->assertFalse( $this->Stuff->save( array("id"=> 1, "name"=>"") ) ); // test passed

Or fix the validation rule like below:

$validate = array("name" => array("rule" =>"notempty", "required"=> true),
); 

In that case model will check if this element even exists in saving array (and if its not empty)

We spent about 30mins. wandering why validation works through form, and not working in unit test.

Hope that was helpful :)

Share Button