有人一直在使用Behat和 Zend 框架吗?有关如何使用两者的任何示例?
问问题
2820 次
3 回答
14
我让它工作了。它适用,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
.
祝你好运!
于 2011-07-21T04:27:33.400 回答
0
Codeception有 Zend Framework 的模块。它很像 Behat,但测试是用 PHP DSL 而不是 Gherkin 编写的。
于 2012-02-27T23:57:57.423 回答
0
我的场景总是停在第一步。我终于弄清楚了,在我的代码中某处有一个死或退出,它正在停止完成。因此,请确保您的应用程序不包含任何死亡或退出。现在它工作正常。
于 2012-06-01T20:20:34.313 回答