Есть ли способ программно предоставлять переменные для ознакомления с функциями?

Я хочу исчерпывающе протестировать набор страниц с помощью behat.

Например, этот план сценария:

Scenario Outline:
Given I am at <path>
When I click some button
Then I should see <hidden-stuff>
| path  | hidden-stuff |
| path1 | element1     |
| path1 | element2     |
| path1 | element3     |
| path2 | element1     |
| path2 | element2     |
| path2 | element3     |
| path3 | element1     |
| path3 | element2     |
| path3 | element3     |
...

В моем конкретном случае у меня есть более 10 примеров и 50 путей, так что вы можете видеть, как это становится чрезвычайно громоздким. Я пытаюсь избежать недоступной функции с 500 строками, которую нужно редактировать каждый раз, когда я добавляю новый путь или несколько элементов.

Могу ли я передать результаты запроса MySQL в параметр «»?

Или указать «путь» в командной строке или через среду?

Есть ли лучший способ подойти к этой проблеме?

редактировать: Я нашел эта почта, который в основном вытирает всю логику из файла .feature (Gherkin) в FeatureContext (PHP). Но это не похоже на способ заинтересовать заинтересованных сторон. Это действительно лучший / единственный подход?

1

Решение

Это будет в значительной степени копирование + вставка для вас. Я написал одно пользовательское определение шага Given the page contents are correct для тебя. Я также добавил Scenario Outline в качестве классического примера, так что оба они делают то же самое, но тот, который вас интересует, это пользовательское определение шага.

GHERKHIN

Feature: Just testing

Scenario Outline: Multiple generic visits
Given I am on "<page>"Then I should see "<content>"Examples:
| page              | content   |
| /                 | HOME PAGE |
| /login            | Username  |
| /profile/step_one | Name      |

Scenario: Multiple dynamic visits
Given the page contents are correct

РЕЗУЛЬТАТ

введите описание изображения здесь

FEATURECONTEXT

Все, что вам нужно, это использовать getPageAndContent() запросить базу данных, чтобы вернуть то, что вы хотите. Пока я просто жестко запрограммировал несколько примеров в $pageAndContent,

namespace Application\FrontendBundle\Features\Context;

use Behat\MinkExtension\Context\MinkContext;
use Behat\Symfony2Extension\Context\KernelAwareContext;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpKernel\KernelInterface;
use Exception;
use LogicException;

class FeatureContext extends MinkContext implements KernelAwareContext
{
/* @var KernelInterface */
private $kernel;

public function setKernel(KernelInterface $kernelInterface)
{
$this->kernel = $kernelInterface;
}

/**
* @Given /^the page contents are correct$/
*/
public function thePageContentsAreCorrect()
{
$pageAndContent = $this->getPageAndContent();

foreach ($pageAndContent as $page => $content) {
try {
$this->visitPath($page);
} catch (Exception $e) {
throw new LogicException(sprintf('The page "%s" does not exist.', $page));
}

try {
$this->assertSession()->pageTextContains($this->fixStepArgument($content));
} catch (Exception $e) {
throw new LogicException(sprintf('The page "%s" does not contain "%s".', $page, $content));
}
}
}

/**
* @return array
*/
private function getPageAndContent()
{
/*
$em = $this->getEntityManager();
$repo = $this->getRepository($em, 'ApplicationFrontendBundle:Pages');

$pageAndContent = [];
$pages = $repo->findAll();
foreach ($pages as $page) {
// Build you array here
$pageAndContent[$page->getUrl] = $page->getContent();
}

return $pageAndContent;
*/

return [
'/' => 'HOME PAGE',
'/login' > 'Username',
'/profile/step_one' => 'Name'
];
}

/**
* @return EntityManager
*/
private function getEntityManager()
{
return $this->kernel->getContainer()->get('doctrine')->getManager();
}

/**
* @param EntityManager $entityManager
* @param string        $serviceName
*
* @return EntityRepository
*/
private function getRepository(EntityManager $entityManager, $serviceName)
{
return $entityManager->getRepository($serviceName);
}
}
2

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector