Как передать метаинформацию о настройке теста в Ginkgo Reporter - PullRequest
0 голосов
/ 28 октября 2019

Этот вопрос имеет несколько слоев;Я попытаюсь начать с того, чего я на самом деле пытаюсь достичь:)

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

Я думал написать новый ginkgo.Reporter и подключиться к функции интерфейса SpecDidCompleteчтобы достичь этого.

Первая проблема заключалась в том, как передать местоположение файла журнала в Reporter. (Журнал создается в вызове BeforeEach). Кажется, не существует чистого пути, поэтому, поскольку SpecSummary, переданный в функцию SpecDidComplete, имеет поле CapturedOutput, я подумал, что могу просто записать местоположение журнала в stdout и затем обработать CapturedOutputчтобы очистить данные, которые я хотел.

К сожалению, однако, это поле всегда пусто. Почему это так?

Вот основной код моей установки:

Подключение Reporter в комплекте:

RunSpecsWithDefaultAndCustomReporters(t, "Integration Suite", []Reporter{NewGeodeLogReporter()})

Reporter только сейчас делает это:

func (this *GeodeLogReporter) SpecDidComplete(specSummary *types.SpecSummary) {
    if specSummary.HasFailureState() {
        fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
        fmt.Println(specSummary.CapturedOutput)
        fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    }
}

И в моих тестах все, что я сейчас делаю, это:

BeforeEach(func() {
    fmt.Printf("{\"locator-log-path\": \"%s\"}\n", path.Join(cluster.ClusterConfig.ClusterDir, cluster.ClusterConfig.LocatorName))
    fmt.Printf("{\"server-log-path\": \"%s\"}\n", path.Join(cluster.ClusterConfig.ClusterDir, cluster.ClusterConfig.ServerName))
    err := cluster.Gfsh("create region --name=FOO --type=REPLICATE")
    Expect(err).To(BeNil())
})

Describe("Fail", func() {
    FIt("Always fails", func() {
        fmt.Fprintln(os.Stdout, "--->>> Output from test on stdout")
        fmt.Fprintln(os.Stderr, "--->>> Output from test on stderr")
        Expect(true).To(BeFalse())
    })
})
...