contributte / planette-site

💀 [DISCONTINUED] All the roads go through the Planette
https://planette.vercel.app
MIT License
9 stars 3 forks source link

2012-01-30: testovani-jednoducheho-controlu #63

Open paveljanda opened 7 years ago

paveljanda commented 7 years ago

Testování jednoduchého Controlu

Ukázkový control, funkčnost je doufám zřejmá. Vykreslí pozdrav světu, přičemž oslovení lze měnit buďto persistentním parametrem, nebo signálem:

class HelloWorldControl extends \Nette\Application\UI\Control
{
        /**
         * @var string
         * @persistent
         */
        public $world = 'World';

        public function render()
        {
                echo htmlspecialchars("Hello $this->world!");
        }

        public function handleChangeTheWorld($newWorld)
        {
                $this->world = $newWorld;
        }
}

Co se na tom dá testovat:

Jak na to: Metoda setUp vytvoří pro každý test novou instanci testovaného controlu. Výstup zachytávám funkcemi pro řízení výstupu, změnu a testování persistentního parametru provádím přímo na něm:

class HelloWorldControlTest extends \PHPUnit_Framework_TestCase
{

        /**
         * @var HelloWorldControl
         */
        protected $testedControl;

        protected function setUp()
        {
                $this->testedControl = new HelloWorldControl;
        }

        public function testRenderHelloWorldByDefault()
        {
                ob_start();
                $this->testedControl->render();
                $output = ob_get_clean();
                $this->assertEquals('Hello Wolrd!', $output);
        }

        public function testWorldCanBeChangedByParameter()
        {
                $this->testedControl->world = 'Nette';
                ob_start();
                $this->testedControl->render();
                $output = ob_get_clean();
                $this->assertEquals('Hello Nette!', $output);
        }

        public function testWorldCanBeChangedBySignal()
        {
                $this->testedControl->handleChangeTheWorld('DPRK');
                ob_start();
                $this->testedControl->render();
                $output = ob_get_clean();

                $this->assertEquals('Hello DPRK!', $output);
                $this->assertEquals('DPRK', $this->testedControl->world);
        }
}
paveljanda commented 7 years ago

author: mrtnzlml (mrtnzlml@gmail.com)