framework - software testing php
IntegraciĆ³n de Zend Framework con Behat BDD (3)
Codeception tiene módulo para Zend Framework . Se parece mucho a Behat, pero las pruebas están escritas en PHP DSL y no en Gherkin.
¿Alguien ha estado usando Behat con Zend Framework? ¿Algún ejemplo sobre cómo usar ambos?
Mi escenario siempre se detenía en el primer paso. Finalmente lo descubrí, hubo un dado o una salida en algún lugar de mi código que se estaba deteniendo. Así que asegúrese de que su aplicación no contenga ningún dado o salga. Ahora está funcionando bien.
Lo tengo funcionando. Funciona con PHPUnit
y Zend_Test
para que pueda usar todos esos assertXYZ()
ingeniosos assertXYZ()
. Primero, asegúrese de behat
instalado y disponible en su sistema $PATH
. Hice lo siguiente:
sudo pear channel-discover pear.symfony.com
sudo pear channel-discover pear.behat.org
sudo pear install behat/behat
Ahora, crea una estructura de directorios así:
features
application
ControllerTestCase.php
bootstrap
FeatureContext.php
homepage.feature
Las features/application/ControllerTestCase.php
class son típicas de una implementación de prueba 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();
}
}
Las features/bootstrap/FeatureContext.php
class es lo que Behat necesita para bootstrap:
<?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();
}
}
Y ahora puedes escribir características como las 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"
Para ejecutar las pruebas, cd
al directorio que contiene la carpeta de features
y escriba behat
.
¡Buena suerte!