update screenshots, allow godog to execute in empty directory
Этот коммит содержится в:
		
							родитель
							
								
									c7e1bf22bc
								
							
						
					
					
						коммит
						337a551087
					
				
					 6 изменённых файлов: 72 добавлений и 25 удалений
				
			
		| 
						 | 
				
			
			@ -107,7 +107,7 @@ Since we need a working implementation, we may start by implementing only what i
 | 
			
		|||
 | 
			
		||||
#### Step 3
 | 
			
		||||
 | 
			
		||||
We only need a number of **godogs** for now. Let's define steps.
 | 
			
		||||
We only need a number of **godogs** for now. Lets keep it simple.
 | 
			
		||||
 | 
			
		||||
``` go
 | 
			
		||||
/* file: examples/godogs/godog.go */
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +121,8 @@ func main() { /* usual main func */ }
 | 
			
		|||
 | 
			
		||||
#### Step 4
 | 
			
		||||
 | 
			
		||||
Now let's finish our step implementations in order to test our feature requirements:
 | 
			
		||||
Now lets implement our step definitions, which we can copy from generated
 | 
			
		||||
console output snippets in order to test our feature requirements:
 | 
			
		||||
 | 
			
		||||
``` go
 | 
			
		||||
/* file: examples/godogs/godog_test.go */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										53
									
								
								builder.go
									
										
									
									
									
								
							
							
						
						
									
										53
									
								
								builder.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -57,35 +57,35 @@ func Build() (string, error) {
 | 
			
		|||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	pkg, err := build.ImportDir(abs, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bin := filepath.Join(pkg.Dir, "godog.test")
 | 
			
		||||
	bin := filepath.Join(abs, "godog.test")
 | 
			
		||||
	// suffix with .exe for windows
 | 
			
		||||
	if goos == "windows" {
 | 
			
		||||
		bin += ".exe"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// we allow package to be nil, if godog is run only when
 | 
			
		||||
	// there is a feature file in empty directory
 | 
			
		||||
	pkg, _ := build.ImportDir(abs, 0)
 | 
			
		||||
	src, anyContexts, err := buildTestMain(pkg)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return bin, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// first of all compile test package dependencies
 | 
			
		||||
	// that will save was many compilations for dependencies
 | 
			
		||||
	// go does it better
 | 
			
		||||
	out, err := exec.Command("go", "test", "-i").CombinedOutput()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return bin, fmt.Errorf("failed to compile package %s:\n%s", pkg.Name, string(out))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	workdir := fmt.Sprintf(filepath.Join("%s", "godog-%d"), os.TempDir(), time.Now().UnixNano())
 | 
			
		||||
	testdir := workdir
 | 
			
		||||
 | 
			
		||||
	// if none of test files exist, or there are no contexts found
 | 
			
		||||
	// we will skip test package compilation, since it is useless
 | 
			
		||||
	if anyContexts {
 | 
			
		||||
		// first of all compile test package dependencies
 | 
			
		||||
		// that will save was many compilations for dependencies
 | 
			
		||||
		// go does it better
 | 
			
		||||
		out, err := exec.Command("go", "test", "-i").CombinedOutput()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return bin, fmt.Errorf("failed to compile package %s:\n%s", pkg.Name, string(out))
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// let go do the dirty work and compile test
 | 
			
		||||
		// package with it's dependencies. Older go
 | 
			
		||||
		// versions does not accept existing file output
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ func Build() (string, error) {
 | 
			
		|||
	// but we need it for our testmain package.
 | 
			
		||||
	// So we look it up in available source paths
 | 
			
		||||
	// including vendor directory, supported since 1.5.
 | 
			
		||||
	try := []string{filepath.Join(pkg.Dir, "vendor", godogImportPath)}
 | 
			
		||||
	try := []string{filepath.Join(abs, "vendor", godogImportPath)}
 | 
			
		||||
	for _, d := range build.Default.SrcDirs() {
 | 
			
		||||
		try = append(try, filepath.Join(d, godogImportPath))
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +143,7 @@ func Build() (string, error) {
 | 
			
		|||
	// will be installed as dependency of godog
 | 
			
		||||
	cmd := exec.Command("go", "install", godogPkg.ImportPath)
 | 
			
		||||
	cmd.Env = os.Environ()
 | 
			
		||||
	out, err = cmd.CombinedOutput()
 | 
			
		||||
	out, err := cmd.CombinedOutput()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return bin, fmt.Errorf("failed to install godog package:\n%s", string(out))
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -193,6 +193,7 @@ func Build() (string, error) {
 | 
			
		|||
	args = append(args, testMainPkgOut)
 | 
			
		||||
	cmd = exec.Command(linker, args...)
 | 
			
		||||
	cmd.Env = os.Environ()
 | 
			
		||||
 | 
			
		||||
	out, err = cmd.CombinedOutput()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return bin, fmt.Errorf("failed to link test executable:\n%s", string(out))
 | 
			
		||||
| 
						 | 
				
			
			@ -232,22 +233,28 @@ func uniqStringList(strs []string) (unique []string) {
 | 
			
		|||
// run the test suite. If TestMain func is found in tested
 | 
			
		||||
// source, it will be removed so it can be replaced
 | 
			
		||||
func buildTestMain(pkg *build.Package) ([]byte, bool, error) {
 | 
			
		||||
	contexts, err := processPackageTestFiles(
 | 
			
		||||
		pkg.TestGoFiles,
 | 
			
		||||
		pkg.XTestGoFiles,
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, false, err
 | 
			
		||||
	var contexts []string
 | 
			
		||||
	var importPath string
 | 
			
		||||
	if nil != pkg {
 | 
			
		||||
		ctxs, err := processPackageTestFiles(
 | 
			
		||||
			pkg.TestGoFiles,
 | 
			
		||||
			pkg.XTestGoFiles,
 | 
			
		||||
		)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, false, err
 | 
			
		||||
		}
 | 
			
		||||
		contexts = ctxs
 | 
			
		||||
		importPath = pkg.ImportPath
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	data := struct {
 | 
			
		||||
		Name       string
 | 
			
		||||
		Contexts   []string
 | 
			
		||||
		ImportPath string
 | 
			
		||||
	}{pkg.Name, contexts, pkg.ImportPath}
 | 
			
		||||
	}{pkg.Name, contexts, importPath}
 | 
			
		||||
 | 
			
		||||
	var buf bytes.Buffer
 | 
			
		||||
	if err = runnerTemplate.Execute(&buf, data); err != nil {
 | 
			
		||||
	if err := runnerTemplate.Execute(&buf, data); err != nil {
 | 
			
		||||
		return nil, len(contexts) > 0, err
 | 
			
		||||
	}
 | 
			
		||||
	return buf.Bytes(), len(contexts) > 0, nil
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
/* file: examples/godogs/godog.go */
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
// Godogs to eat
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										38
									
								
								examples/godogs/godog_test.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										38
									
								
								examples/godogs/godog_test.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
/* file: examples/godogs/godog_test.go */
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/DATA-DOG/godog"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
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 FeatureContext(s *godog.Suite) {
 | 
			
		||||
	s.Step(`^there are (\d+) godogs$`, thereAreGodogs)
 | 
			
		||||
	s.Step(`^I eat (\d+)$`, iEat)
 | 
			
		||||
	s.Step(`^there should be (\d+) remaining$`, thereShouldBeRemaining)
 | 
			
		||||
 | 
			
		||||
	s.BeforeScenario(func(interface{}) {
 | 
			
		||||
		Godogs = 0 // clean the state before every scenario
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											Двоичные данные
										
									
								
								screenshots/passed.png
									
										
									
									
									
								
							
							
						
						
									
										
											Двоичные данные
										
									
								
								screenshots/passed.png
									
										
									
									
									
								
							
										
											Двоичный файл не отображается.
										
									
								
							| 
		 До Ширина: | Высота: | Размер: 54 КиБ После Ширина: | Высота: | Размер: 80 КиБ  | 
							
								
								
									
										
											Двоичные данные
										
									
								
								screenshots/undefined.png
									
										
									
									
									
								
							
							
						
						
									
										
											Двоичные данные
										
									
								
								screenshots/undefined.png
									
										
									
									
									
								
							
										
											Двоичный файл не отображается.
										
									
								
							| 
		 До Ширина: | Высота: | Размер: 109 КиБ После Ширина: | Высота: | Размер: 105 КиБ  | 
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче