Годог передать аргументы / состояние между шагами - PullRequest
1 голос
/ 31 марта 2020

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

func FeatureContext(s *godog.Suite) {
    // This step is called in background
    s.Step(`^I work with "([^"]*)" entities`, iWorkWithEntities)
    // This step should know about the type of entity
    s.Step(`^I run the "([^"]*)" mutation with the arguments:$`, iRunTheMutationWithTheArguments)

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

state := make(map[string]string, 0)
s.Step(`^I work with "([^"]*)" entities`, func(entityName string) error {
    return iWorkWithEntities(entityName, state)
})
s.Step(`^I run the "([^"]*)" mutation with the arguments:$`, func(mutationName string, args *messages.PickleStepArgument_PickleTable) error {
    return iRunTheMutationWithTheArguments(mutationName, args, state)
})

Но это выглядит как обходной путь. Есть ли какая-либо функция в самой библиотеке Godog для передачи этой информации?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Я нашел удачу, используя методы вместо функций для шагов. Затем поместим состояние в структуру.

func FeatureContext(s *godog.Suite) {
    t := NewTestRunner()

    s.Step(`^I work with "([^"]*)" entities`, t.iWorkWithEntities)
}

type TestRunner struct {
    State map[string]interface{}
}

func (t *TestRunner) iWorkWithEntities(s string) error {
    t.State["entities"] = s
    ...
}
2 голосов
/ 01 апреля 2020

В настоящее время Godog не имеет подобной функции, но то, что я делал в прошлом в целом (нужно проверить на параллелизм), это создание структуры TestContext для хранения данных и создания fre sh по одному перед каждым сценарием.

func FeatureContext(s *godog.Suite) {
    config := config.NewConfig()
    context := NewTestContext(config)

    t := &tester{
        TestContext: context,
    }

    s.BeforeScenario(func(interface{}) {
        // reset context between scenarios to avoid
        // cross contamination of data
        context = NewTestContext(config)
    })
}

У меня также есть ссылка на старый пример: https://github.com/jaysonesmith/godog-baseline-example

...