--format junit:result.xml will now write to result.xml
Этот коммит содержится в:
родитель
e6223baaff
коммит
d0991c8488
3 изменённых файлов: 99 добавлений и 6 удалений
8
godog.go
8
godog.go
|
@ -10,7 +10,7 @@ Godog acts similar compared to go test command. It uses go
|
|||
compiler and linker tool in order to produce test executable. Godog
|
||||
contexts needs to be exported same as Test functions for go test.
|
||||
|
||||
For example, imagine you’re about to create the famous UNIX ls command.
|
||||
For example, imagine you're about to create the famous UNIX ls command.
|
||||
Before you begin, you describe how the feature should work, see the example below..
|
||||
|
||||
Example:
|
||||
|
@ -30,9 +30,9 @@ Example:
|
|||
foo
|
||||
"""
|
||||
|
||||
Now, wouldn’t it be cool if something could read this sentence and use it to actually
|
||||
run a test against the ls command? Hey, that’s exactly what this package does!
|
||||
As you’ll see, Godog is easy to learn, quick to use, and will put the fun back into tests.
|
||||
Now, wouldn't it be cool if something could read this sentence and use it to actually
|
||||
run a test against the ls command? Hey, that's exactly what this package does!
|
||||
As you'll see, Godog is easy to learn, quick to use, and will put the fun back into tests.
|
||||
|
||||
Godog was inspired by Behat and Cucumber the above description is taken from it's documentation.
|
||||
*/
|
||||
|
|
23
run.go
23
run.go
|
@ -15,6 +15,7 @@ import (
|
|||
"github.com/cucumber/messages-go/v10"
|
||||
|
||||
"github.com/cucumber/godog/colors"
|
||||
"github.com/cucumber/godog/formatters"
|
||||
"github.com/cucumber/godog/internal/models"
|
||||
"github.com/cucumber/godog/internal/parser"
|
||||
"github.com/cucumber/godog/internal/storage"
|
||||
|
@ -140,6 +141,24 @@ func runWithOptions(suiteName string, runner runner, opt Options) int {
|
|||
output = opt.Output
|
||||
}
|
||||
|
||||
if formatterParts := strings.SplitN(opt.Format, ":", 2); len(formatterParts) > 1 {
|
||||
f, err := os.Create(formatterParts[1])
|
||||
if err != nil {
|
||||
err = fmt.Errorf(
|
||||
`couldn't create file with name: "%s", error: %s`,
|
||||
formatterParts[1], err.Error(),
|
||||
)
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
|
||||
return exitOptionError
|
||||
}
|
||||
|
||||
defer f.Close()
|
||||
|
||||
output = f
|
||||
opt.Format = formatterParts[0]
|
||||
}
|
||||
|
||||
if opt.NoColors {
|
||||
output = colors.Uncolored(output)
|
||||
} else {
|
||||
|
@ -165,10 +184,10 @@ func runWithOptions(suiteName string, runner runner, opt Options) int {
|
|||
opt.Concurrency = 1
|
||||
}
|
||||
|
||||
formatter := FindFmt(opt.Format)
|
||||
formatter := formatters.FindFmt(opt.Format)
|
||||
if nil == formatter {
|
||||
var names []string
|
||||
for name := range AvailableFormatters() {
|
||||
for name := range formatters.AvailableFormatters() {
|
||||
names = append(names, name)
|
||||
}
|
||||
fmt.Fprintln(os.Stderr, fmt.Errorf(
|
||||
|
|
74
run_test.go
74
run_test.go
|
@ -6,6 +6,7 @@ import (
|
|||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -308,6 +309,79 @@ func Test_RandomizeRun(t *testing.T) {
|
|||
assert.Equal(t, expectedOutput, actualOutput)
|
||||
}
|
||||
|
||||
func Test_FormatOutputRun(t *testing.T) {
|
||||
const noRandomFlag = 0
|
||||
const noConcurrencyFlag = 1
|
||||
const formatter = "junit"
|
||||
const featurePath = "internal/formatters/formatter-tests/features/with_few_empty_scenarios.feature"
|
||||
|
||||
fmtOutputScenarioInitializer := func(ctx *ScenarioContext) {
|
||||
ctx.Step(`^(?:a )?failing step`, failingStepDef)
|
||||
ctx.Step(`^(?:a )?pending step$`, pendingStepDef)
|
||||
ctx.Step(`^(?:a )?passing step$`, passingStepDef)
|
||||
ctx.Step(`^odd (\d+) and even (\d+) number$`, oddEvenStepDef)
|
||||
}
|
||||
|
||||
expectedStatus, expectedOutput := testRun(t,
|
||||
fmtOutputScenarioInitializer,
|
||||
formatter, noConcurrencyFlag,
|
||||
noRandomFlag, []string{featurePath},
|
||||
)
|
||||
|
||||
dir := filepath.Join(os.TempDir(), t.Name())
|
||||
err := os.MkdirAll(dir, 0755)
|
||||
require.NoError(t, err)
|
||||
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
file := filepath.Join(dir, "result.xml")
|
||||
|
||||
actualStatus, actualOutput := testRun(t,
|
||||
fmtOutputScenarioInitializer,
|
||||
formatter+":"+file, noConcurrencyFlag,
|
||||
noRandomFlag, []string{featurePath},
|
||||
)
|
||||
|
||||
result, err := ioutil.ReadFile(file)
|
||||
require.NoError(t, err)
|
||||
actualOutputFromFile := string(result)
|
||||
|
||||
assert.Equal(t, expectedStatus, actualStatus)
|
||||
assert.Empty(t, actualOutput)
|
||||
assert.Equal(t, expectedOutput, actualOutputFromFile)
|
||||
}
|
||||
|
||||
func Test_FormatOutputRun_Error(t *testing.T) {
|
||||
const noRandomFlag = 0
|
||||
const noConcurrencyFlag = 1
|
||||
const formatter = "junit"
|
||||
const featurePath = "internal/formatters/formatter-tests/features/with_few_empty_scenarios.feature"
|
||||
|
||||
fmtOutputScenarioInitializer := func(ctx *ScenarioContext) {
|
||||
ctx.Step(`^(?:a )?failing step`, failingStepDef)
|
||||
ctx.Step(`^(?:a )?pending step$`, pendingStepDef)
|
||||
ctx.Step(`^(?:a )?passing step$`, passingStepDef)
|
||||
ctx.Step(`^odd (\d+) and even (\d+) number$`, oddEvenStepDef)
|
||||
}
|
||||
|
||||
expectedStatus, expectedOutput := exitOptionError, ""
|
||||
|
||||
dir := filepath.Join(os.TempDir(), t.Name())
|
||||
file := filepath.Join(dir, "result.xml")
|
||||
|
||||
actualStatus, actualOutput := testRun(t,
|
||||
fmtOutputScenarioInitializer,
|
||||
formatter+":"+file, noConcurrencyFlag,
|
||||
noRandomFlag, []string{featurePath},
|
||||
)
|
||||
|
||||
assert.Equal(t, expectedStatus, actualStatus)
|
||||
assert.Equal(t, expectedOutput, actualOutput)
|
||||
|
||||
_, err := ioutil.ReadFile(file)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func Test_AllFeaturesRun(t *testing.T) {
|
||||
const concurrency = 100
|
||||
const noRandomFlag = 0
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче