【问题标题】:Zend Framework integration with Behat BDDZend Framework 与 Behat BDD 的集成
【发布时间】:2011-04-14 17:55:59
【问题描述】:

有人在 Zend Framework 中使用过Behat 吗?有关如何使用两者的任何示例?

【问题讨论】:

  • 我认为您可能是这方面的先驱。我什至没有听说过behat。从网站上听起来和看起来都很有用。
  • 您希望测试应用程序的哪些元素?全栈、UI、API?根据您的测试目标,有多种不同的方法。

标签: php zend-framework tdd bdd behat


【解决方案1】:

我让它工作了。它适用于PHPUnitZend_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

祝你好运!

【讨论】:

  • 有没有办法在单独的文件中定义步骤?不是所有的都在一个FeatureContext 类中?
  • 这似乎对我不起作用。 ZF 引导程序必须被多次调用,因为我收到“常量已定义”错误
【解决方案2】:

密码接收has module for Zend Framework。它很像 Behat,但测试是用 PHP DSL 而不是 Gherkin 编写的。

【讨论】:

    【解决方案3】:

    我的场景总是停留在第一步。我终于弄清楚了,在我的代码中某处有一个死或退出,它正在停止完成。因此,请确保您的应用不包含任何死亡或退出。现在它工作正常。

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 2023-04-04
      • 2012-05-29
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      相关资源
      最近更新 更多