首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Zend框架与Behat BDD的集成

Zend框架与Behat BDD的集成
EN

Stack Overflow用户
提问于 2011-04-15 01:55:59
回答 3查看 2.8K关注 0票数 16

有没有人在Zend Framework中使用过Behat?有没有同时使用这两种方法的例子?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-21 12:27:33

我把它修好了。它可以与PHPUnitZend_Test一起使用,因此您可以使用所有这些漂亮的assertXYZ()方法。首先,确保您已经安装了behat并在系统$PATH中可用。我做了以下工作:

代码语言:javascript
复制
sudo pear channel-discover pear.symfony.com
sudo pear channel-discover pear.behat.org
sudo pear install behat/behat

现在,像这样创建一个目录结构:

代码语言:javascript
复制
features
    application
        ControllerTestCase.php
    bootstrap
        FeatureContext.php
    homepage.feature

features/application/ControllerTestCase.php类是典型的Zend_Test测试实现:

代码语言:javascript
复制
<?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自我引导所需的:

代码语言:javascript
复制
<?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这样的特性了

代码语言:javascript
复制
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

祝好运!

票数 14
EN

Stack Overflow用户

发布于 2012-02-28 07:57:57

Codeception has module for Zend Framework。它很像Behat,但测试是用PHP DSL编写的,而不是小黄瓜。

票数 0
EN

Stack Overflow用户

发布于 2012-06-02 04:20:34

我的场景总是在第一步就停止了。我终于弄清楚了,在我的代码中有一个死或退出的地方,它停止了behat的完整性。因此,请确保您的应用程序不包含任何骰子或退出。现在它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5667444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档