integration

package
v0.0.0-...-4305b7b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 14, 2018 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package integration contains some helpers for writing integration tests using BDD and Cucumber via godog (https://github.com/DATA-DOG/godog).

At a high level, to use this package you need to create a folder under this folder named `component` where component is the component you want to test with integration testing. Then add the following in `component/main_test.go`:

    package component

    import (
      "os"
      "testing"
      "time"

      "github.com/DATA-DOG/godog"
    )

    func TestMain(m *testing.M) {
      status := godog.RunWithOptions("godog", func(s *godog.Suite) {
	   FeatureContext(s)
      }, godog.Options{
	   Format:    "progress",
	   Paths:     []string{"features"},
	   Randomize: time.Now().UTC().UnixNano(), // randomize scenario execution order
      })

      if st := m.Run(); st > status {
	   status = st
      }
      os.Exit(status)
    }

And then run `$ mkdir component/features`. Create `component_test.go` with the following in it:

package component

type component struct {
  *integration.Suite
}

func FeatureContext(s *godog.Suite) {
  c := &component{
    Suite: &integration.Suite{},
  }

  c.Register(s)
}

Then create features in component/features/*.feature, eg:

# user-creates-task.feature
Feature: A user can Create a Task

  Background:
    Given a base stack

  Scenario:
    As a User
    When I try to create an example Task
    Then there was no error
    Then tear everything down

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Suite

type Suite struct {
	DB *sqlx.DB // raw SQL database in case you need it

	// DAOs
	Checks   database.Checks
	Runs     database.Runs
	RunInfos database.RunInfos

	// Meta crap
	Mux *http.ServeMux
	TS  *httptest.Server

	ClientChecks lokahi.Checks

	Err error
}

Suite is a group of story fragments. This includes some fun helpers for the life of this test suite as well as some setup and teardown code.

func (*Suite) GetErr

func (s *Suite) GetErr() error

GetErr fetches the suite active error.

The suggested story fragement for this function is:

Then there was no error

and should be followed up with an additional condition or two examining the error string for known values. It can be used with a FeatureContext function of something like:

func FeatureContext(s *godog.Suite) {
  val := &feature{
    Suite: &integration.Suite{},
  }

  s.Step(`^there was no error$`, val.Suite.GetErr)
}

This doesn't have any branches because the zero value for any go value boxed in an interface is nil.

func (*Suite) Register

func (s *Suite) Register(gs *godog.Suite)

Register is a quick shortcut for registering all of the convenience shortcuts defined in the Suite type.

func (*Suite) Setup

func (s *Suite) Setup() error

Setup reads configuration information from the environment and then uses this to set up an integration stack of lokahi.

The suggested story fragment for this function is:

Given a base stack

and it can be used with a function of something like:

func FeatureContext(s *godog.Suite) {
  val := &feature{
    Suite: &integration.Suite{},
  }

  s.Step(`^a base stack$`, val.Suite.Setup)
}

func (*Suite) Teardown

func (s *Suite) Teardown() error

Teardown destroys all resources that Setup allocated.

The suggested story fragment for this function is:

Then tear everything down

and it can be used with a function of something like:

func FeatureContext(s *godog.Suite) {
  val := &feature{
    Suite: &integration.Suite{},
  }

  s.Step(`^tear everything down$`, val.Suite.Teardown)
}

func (*Suite) WantAnError

func (s *Suite) WantAnError() error

WantAnError asserts that the suite active error is non-nil. If the suite active error is nil for some reason, an error is returned.

The suggested story fragment for this function is:

Then there was an error

and should be followed up with an additional condition or two examining the error string for known values. It can be used with a FeatureContext function of something like:

func FeatureContext(s *godog.Suite) {
  val := &feature{
    Suite: &integration.Suite{},
  }

  s.Step(`^there was an error$`, val.Suite.WantAnError)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL