Есть ли способ использовать Behat в тестовом случае phpunit?

Я использовал тестовый язык Behat, похожий на английский (Gherkin?), Для написания тестовых сценариев, но быстро обнаружил его существенные ограничения.

Если бы я мог выполнить эти тесты в PHP в скриптах phpunit, которые я настроил, я мог бы значительно расширить тесты, которые я мог бы добавить. (Я использую FuelPHP).

Я несколько часов ковырялся, пытаясь заставить Behat выполнить внутри тестового скрипта PHPUNIT, но мне не повезло.

Это возможно?

0

Решение

Я думаю, что вы что-то путаете, потому что то, что вы говорите, не имеет большого смысла. Если вам трудно выразить логику с помощью кода, вам следует задать конкретный вопрос по этому поводу.

Behat и Mink написаны на PHP, вы пишете свои контексты на PHP, существует миллиард плагинов, облегчающих жизнь (также написанных на php). На самом деле, все ваши тесты выполняются в PHP, когда вы их запускаете … Да!

Если вы хотите сравнить данные с двух страниц, вы можете просто создать такой шаг:

/**
* @Then /^the page "(.+)" and the page "(.+)" content should somehow compare$/
*/
public function assertPageContentCompares($page1, $page2)
{
$session = $this->getSession();
$session->visit($page1);
$page1contents = $session->getPage()->getHtml();

$session->visit($page2);
$page2contents = $session->getPage()->getHtml();

// Compare stuff…
}

Помимо очевидного, вы можете использовать PHPUnit в Behat / Mink, чтобы сделать утверждения, то есть в ваших определениях шагов. Большинство (не во всех) утверждений PHPUnit являются статическими методами, использовать их так просто:

PHPUnit_Framework_TestCase::assertSame("", "");

Вы можете использовать Selenium (возможно, и другие фреймворки) с PHPUnit, если это больше касается модульного тестирования, чем функционального тестирования, официальная документация рассказывает, как.

Если вы просто ненавидите корнишона, то с Behat мало что можно сделать — это суть. С PhpStorm 8 есть довольно хорошая поддержка, вы можете легко перемещаться по коду и быстро его реорганизовывать. Если это не поможет, есть еще одна отличная альтернатива Behat Codeception, где вы используете чистый PHP для определения ваших тестов. Может быть, это то, что вы ищете.

2

Другие решения

Да. Вы можете использовать библиотеку, которую я создал: jonathanjfshaw / phpunitbehat.

Ваши тесты phpunit будут выглядеть так:

    namespace MyProject\Tests;

use PHPUnit\Framework\TestCase;
use PHPUnitBehat\TestTraits\BehatTestTrait;

class MyTestBase extends TestCase {
use BehatTestTrait;
}
    namespace MyProject\Tests;

class MyTest extends MyTestBase {

protected $feature = <<<'FEATURE'
Feature: Demo feature
In order to demonstrate testing a feature in phpUnit
We define a simple feature in the class
Scenario: Success
Given a step that succeeds
Scenario: Failure
When a step fails

Scenario: Undefined
Then there is a step that is undefined
FEATURE;

/**
* @Given a step that succeeds
*/
public function aStepThatSucceeds() {
$this->assertTrue(true);
}

/**
* @When a step fails
*/
public function aStepFails() {
$this->assertTrue(false);
}
}

я написал сообщение в блоге, объясняющее, почему я думаю, что это не плохая идея.

0

По вопросам рекламы [email protected]