& quot; Выбранный узел не имеет предка формы & quot;

Я тестирую свое PHP / загрузочное приложение с помощью Behat + Mink. В настоящее время я пытаюсь использовать переменные для извлечения из поля с контуром сценария.

Сайт выглядит так
введите описание изображения здесь

Мой код выглядит так
в файле функции
Характеристика: Фондовый портфель
Чтобы увидеть, какие акции принадлежат
Как пользователь
Я хочу показать свое портфолио

    Scenario: User Is On Home Page
Given that I am logged in
When print current URL
Then I should see "Portfolio"

Scenario Outline: User Buys Stock
Given that I am logged in
And I own <start> "AAPL" stocks
When I fill in "ticker" with "AAPL"And I sell <sell> stock
Then I should own <finish> "AAPL" stocks

Examples:
| start | sell | finish |
|  13   |  5   |  8     |
|  10   |  3   |  7     |

в php файле

 /**
* @Then /^I should own (.*) "([^"]*)" stocks$/
*/
public function iShouldOwnStocks($start, $arg1)
{
$this->assertSession()->fieldValueEquals($arg1, $start);
}/**
* @Given /^I sell (.*) stock$/
*/
public function iSellStock($sell)

{
$this->fillField("quantity", $sell);
}

/**
* @Given /^I own (.*) "([^"]*)" stocks$/
*/
public function iOwnStocks($start, $arg1)
{
$this->assertSession()->fieldValueEquals($arg1, $start);

}

Ошибка, которую я продолжаю получать:

ошибка

Я не совсем уверен, что здесь происходит — помощь будет очень признателен!

0

Решение

Первый, о регулярном выражении:

Не использовать (.*) если он не находится в конце определения шага, как полезный совет для вас или других разработчиков, исправляющих ошибку позже. Это регулярное выражение буквально означает, принять любой символ, кроме новой строки.

Вместо этого используйте ([0-9]+), который будет принимать только цифры, или ([\d]+), который, опять же, будет принимать только цифры, и будет принимать их, только если есть 1 или более.

во-вторых, о регулярном выражении:

Попробуйте также заключить число в кавычки, "([0-9]+)" или же "([\d]+)", который должен делать то же, что и выше, но делает его немного более понятным, разрешая только цифры в кавычках.

Penultimately, о регулярном выражении

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

"([\d])*\.?([\d]){0,2}"

Который будет захватывать любое количество чисел до, необязательное десятичное место и до двух чисел после.

наконец, о дублировании функций

Вы утверждаете одно и то же дважды в двух разных определениях шагов.
Лично я бы поменял

/**
* @Then /^I should own (.*) "([^"]*)" stocks$/
*/
public function iShouldOwnStocks($start, $arg1)
{
$this->assertSession()->fieldValueEquals($arg1, $start);
}

функция к

/**
* @Then /^I (?:|should )own "([0-9]+)" "([^"]*)" stocks$/
*/
public function iShouldOwnStocks($start, $arg1)
{
$this->assertSession()->fieldValueEquals($arg1, $start);
}

Что делает необязательное «следует», что означает отсутствие дублирования того же самого утверждения, что делает ваш контекст менее запутанным.

По сути, вам больше не нужно это:

/**
* @Given /^I own (.*) "([^"]*)" stocks$/
*/
public function iOwnStocks($start, $arg1)
{
$this->assertSession()->fieldValueEquals($arg1, $start);

}

Если после предложенных мной исправлений регулярных выражений проблема все еще остается, оставьте комментарий, и я постараюсь ответить на него в новом абзаце.

1

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

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

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