Behat 3 — передача параметров (из импортированного файла) в конструктор FeatureContext

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

С Behat 2 все работало нормально:

behat.yml (сокращено для удобства):

default:
context:
extensions:
Behat\MinkExtension\Extension:
base_url: 'http://mysite.local'
goutte: ~
selenium2: ~
...
imports:
- config/data/mydata.yml

и mydata.yml:

default:
context:
parameters:
some_long_array:
'key1': 'value1'
'key2': 'value2'
...

и я мог бы иметь много таких импортированных файлов параметров.

Используя Behat 3 — я пытался добиться того же с помощью следующего
behat.yml (сокращенно):

default:
suites:
default:
contexts:
- FeatureContext
extensions:
Behat\MinkExtension:
base_url: 'http://mysite.local'
goutte: ~
selenium2: ~
...
imports:
- config/data/mydata.yml

и mydata.yml:

default:
suites:
default:
contexts:
- FeatureContext:
parameters:
some_long_array:
'key1': 'value1'
'key2': 'value2'
...

Это не работает и ничего не передается конструктору.

Исправимая фатальная ошибка: аргумент 1 передан
FeatureContext :: __ construct () должен иметь массив типов, ни один из которых не указан в
FeatureContext -> __ конструкт ()

Мой класс FeatureContext выглядит следующим образом:

class FeatureContext implements SnippetAcceptingContext
{

/**
* Initializes context.
*
* Every scenario gets its own context instance.
* You can also pass arbitrary arguments to the
* context constructor through behat.yml.
*/
public function __construct(array $parameters)
{
var_dump($parameters);
}

}

Если я передаю параметры inline в behat.yml (а не в импортированном файле), все работает нормально:

default:
suites:
default:
contexts:
- FeatureContext:
parameters:
some_long_array:
'key1': 'value1'
'key2': 'value2'
extensions:
Behat\MinkExtension:
base_url: 'http://mysite.local'
goutte: ~
selenium2: ~
...

и тесты запускаются, и я вижу массив, как и ожидалось. Проблема в том, что у меня есть несколько больших массивов параметров, и было бы нецелесообразно указывать их все в файле behat.yml.

Как я могу указать большие массивы параметров во внешних файлах, используя Behat 3?

4

Решение

Вы были так близки, мужик. Я смог сделать это так:

default:
autoload: [ %paths.base%/contexts ]
extensions:
Behat\MinkExtension:
base_url: http://qa.api.somesite.com
sessions:
default:
selenium2: ~
Sanpi\Behatch\Extension: ~
suites:
default:
paths:    [ %paths.base%/features ]
filters:
contexts:
- FeatureContext
- Behat\MinkExtension\Context\MinkContext
frontend:
paths:    [ %paths.base%/features/frontend ]
filters:
contexts:
- FeatureContext:
parameters:
environment: qa
api_url: http://api.somesite.com
login: some_login
key: 409jfa94k4tj
- Behat\MinkExtension\Context\MinkContext
- behatch:browser

Если вы заметили в «внешнем» наборе, у меня есть контекст «FeatureContext». Ниже это имя параметра, который будет ожидать конструктор для класса FeatureContext. Затем он автоматически превращает его в ассоциативный массив.

4

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

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

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