Я тестирую свое 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-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);
}
Если после предложенных мной исправлений регулярных выражений проблема все еще остается, оставьте комментарий, и я постараюсь ответить на него в новом абзаце.
Других решений пока нет …