Я использовал тестовый язык Behat, похожий на английский (Gherkin?), Для написания тестовых сценариев, но быстро обнаружил его существенные ограничения.
Если бы я мог выполнить эти тесты в PHP в скриптах phpunit, которые я настроил, я мог бы значительно расширить тесты, которые я мог бы добавить. (Я использую FuelPHP).
Я несколько часов ковырялся, пытаясь заставить Behat выполнить внутри тестового скрипта PHPUNIT, но мне не повезло.
Это возможно?
Я думаю, что вы что-то путаете, потому что то, что вы говорите, не имеет большого смысла. Если вам трудно выразить логику с помощью кода, вам следует задать конкретный вопрос по этому поводу.
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 для определения ваших тестов. Может быть, это то, что вы ищете.
Да. Вы можете использовать библиотеку, которую я создал: 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);
}
}
я написал сообщение в блоге, объясняющее, почему я думаю, что это не плохая идея.