
* Remove deprecation from flags, update example to use CLI flags * Add comment to ShowHelp option * Fix test * Update CHANGELOG.md
89 строки
2,6 КиБ
Go
89 строки
2,6 КиБ
Go
package godogs
|
|
|
|
// This example shows how to set up test suite runner with Go subtests and godog command line parameters.
|
|
// Sample commands:
|
|
// * run all scenarios from default directory (features): go test -test.run "^TestFeatures/"
|
|
// * run all scenarios and list subtest names: go test -test.v -test.run "^TestFeatures/"
|
|
// * run all scenarios from one feature file: go test -test.v -godog.paths features/nodogs.feature -test.run "^TestFeatures/"
|
|
// * run all scenarios from multiple feature files: go test -test.v -godog.paths features/nodogs.feature,features/godogs.feature -test.run "^TestFeatures/"
|
|
// * run single scenario as a subtest: go test -test.v -test.run "^TestFeatures/Eat_5_out_of_12$"
|
|
// * show usage help: go test -godog.help
|
|
// * show usage help if there were other test files in directory: go test -godog.help godogs_test.go
|
|
// * run scenarios with multiple formatters: go test -test.v -godog.format cucumber:cuc.json,pretty -test.run "^TestFeatures/"
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/cucumber/godog"
|
|
"github.com/cucumber/godog/colors"
|
|
)
|
|
|
|
var opts = godog.Options{Output: colors.Colored(os.Stdout)}
|
|
|
|
func init() {
|
|
godog.BindFlags("godog.", flag.CommandLine, &opts)
|
|
}
|
|
|
|
func TestFeatures(t *testing.T) {
|
|
o := opts
|
|
o.TestingT = t
|
|
|
|
status := godog.TestSuite{
|
|
Name: "godogs",
|
|
Options: &o,
|
|
TestSuiteInitializer: InitializeTestSuite,
|
|
ScenarioInitializer: InitializeScenario,
|
|
}.Run()
|
|
|
|
if status == 2 {
|
|
t.SkipNow()
|
|
}
|
|
|
|
if status != 0 {
|
|
t.Fatalf("zero status code expected, %d received", status)
|
|
}
|
|
}
|
|
|
|
func thereAreGodogs(available int) error {
|
|
Godogs = available
|
|
return nil
|
|
}
|
|
|
|
func iEat(num int) error {
|
|
if Godogs < num {
|
|
return fmt.Errorf("you cannot eat %d godogs, there are %d available", num, Godogs)
|
|
}
|
|
Godogs -= num
|
|
return nil
|
|
}
|
|
|
|
func thereShouldBeRemaining(remaining int) error {
|
|
if Godogs != remaining {
|
|
return fmt.Errorf("expected %d godogs to be remaining, but there is %d", remaining, Godogs)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func thereShouldBeNoneRemaining() error {
|
|
return thereShouldBeRemaining(0)
|
|
}
|
|
|
|
func InitializeTestSuite(ctx *godog.TestSuiteContext) {
|
|
ctx.BeforeSuite(func() { Godogs = 0 })
|
|
}
|
|
|
|
func InitializeScenario(ctx *godog.ScenarioContext) {
|
|
ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) {
|
|
Godogs = 0 // clean the state before every scenario
|
|
return ctx, nil
|
|
})
|
|
|
|
ctx.Step(`^there are (\d+) godogs$`, thereAreGodogs)
|
|
ctx.Step(`^I eat (\d+)$`, iEat)
|
|
ctx.Step(`^there should be (\d+) remaining$`, thereShouldBeRemaining)
|
|
ctx.Step(`^there should be none remaining$`, thereShouldBeNoneRemaining)
|
|
}
|