Интеграция на Zend Framework с Behat BDD

Някой да е използвал Behat със Zend Framework? Някакви примери как да използвате и двете?


person rizidoro    schedule 14.04.2011    source източник
comment
Мисля, че по някакъв начин може да сте пионер в това. Дори не бях чувал за behat. звучи и изглежда полезно от сайта.   -  person Jerry Saravia    schedule 02.06.2011
comment
Какви елементи от вашето приложение искате да тествате? Пълен стек, потребителски интерфейс, API? Има редица различни подходи в зависимост от вашите цели на тестване.   -  person Ben Waine    schedule 08.07.2011


Отговори (3)


Получих работа. Работи с PHPUnit и Zend_Test, така че можете да използвате всички тези изящни assertXYZ() методи. Първо се уверете, че имате behat инсталиран и наличен във вашата система $PATH. Направих следното:

sudo pear channel-discover pear.symfony.com
sudo pear channel-discover pear.behat.org
sudo pear install behat/behat

Сега създайте структура на директория по следния начин:

features
    application
        ControllerTestCase.php
    bootstrap
        FeatureContext.php
    homepage.feature

Класът features/application/ControllerTestCase.php е типичен за изпълнение на тестване на Zend_Test:

<?php
require_once 'Zend/Application.php';
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';

class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase {

    public $application;

    public function setUp() {
        $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH 
                . '/configs/application.ini');
        $this->bootstrap = array($this, 'appBootstrap');
        parent::setUp();
    }

    public function appBootstrap(){
        $this->application->bootstrap();
    }
}

Класът features/bootstrap/FeatureContext.php е това, от което Behat се нуждае, за да стартира себе си:

<?php

use Behat\Behat\Context\ClosuredContextInterface,
    Behat\Behat\Context\TranslatedContextInterface,
    Behat\Behat\Context\BehatContext,
    Behat\Behat\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode,
    Behat\Gherkin\Node\TableNode;

require_once 'PHPUnit/Autoload.php';
require_once 'PHPUnit/Framework/Assert/Functions.php';

define('APPLICATION_ENV', 'testing');
define('APPLICATION_PATH', dirname(__FILE__) . '/../path/to/your/zf/application');

set_include_path('.' . PATH_SEPARATOR . APPLICATION_PATH . '/../library'
        . PATH_SEPARATOR . get_include_path());

require_once dirname(__FILE__) . '/../application/ControllerTestCase.php';

class FeatureContext extends BehatContext {

    protected $app;

    /**
     * Initializes context.
     * Every scenario gets it's own context object.
     *
     * @param array $parameters context parameters (set up via behat.yml)
     */
    public function __construct(array $parameters) {
        $this->app = new ControllerTestCase();
        $this->app->setUp();
    }

    /**
     * @When /^I load the URL "([^"]*)"$/
     */
    public function iLoadTheURL($url) {
        $this->app->dispatch($url);
    }

    /**
     * @Then /^the module should be "([^"]*)"$/
     */
    public function theModuleShouldBe($desiredModule) {
        $this->app->assertModule($desiredModule);
    }

    /**
     * @Given /^the controller should be "([^"]*)"$/
     */
    public function theControllerShouldBe($desiredController) {
        $this->app->assertController($desiredController);
    }

    /**
     * @Given /^the action should be "([^"]*)"$/
     */
    public function theActionShouldBe($desiredAction) {
        $this->app->assertAction($desiredAction);
    }

    /**
     * @Given /^the page should contain a "([^"]*)" tag that contains "([^"]*)"$/
     */
    public function thePageShouldContainATagThatContains($tag, $content) {
        $this->app->assertQueryContentContains($tag, $content);
    }

    /**
     * @Given /^the action should not redirect$/
     */
    public function theActionShouldNotRedirect() {
        $this->app->assertNotRedirect();
    }

}

И сега можете да пишете функции като features/homepage.feature:

Feature: Homepage
  In order to know ZF works with Behat
  I need to see that the page loads.

Scenario: Check the homepage
  Given I load the URL "/index"
  Then the module should be "default"
  And the controller should be "index"
  And the action should be "index"
  And the action should not redirect
  And the page should contain a "title" tag that contains "My Nifty ZF App"

За да стартирате тестовете, cd към директорията, която съдържа папката features, и въведете behat.

Късмет!

person curtisdf    schedule 21.07.2011
comment
Има ли начин да има дефиниции на стъпки в отделни файлове? Не всички от тях в един FeatureContext клас? - person takeshin; 11.09.2011
comment
това изглежда не работи за мен. ZF bootstrap трябва да се извиква многократно, защото получавам Constant вече дефинирани грешки - person Andrew; 14.01.2012

Codeception има модул за Zend Framework. Много прилича на Behat, но тестовете са написани на PHP DSL, а не на Gherkin.

person Davert    schedule 27.02.2012

Моят сценарий винаги спираше на първата стъпка. Най-накрая го разбрах, имаше матрица или изход някъде в кода ми, който спираше без да е завършен. Затова се уверете, че приложението ви не съдържа матрица или изход. Сега работи добре.

person Stéphane Gerber    schedule 01.06.2012