gkampitakis / go-snaps

Jest-like snapshot testing in Go 📸
https://pkg.go.dev/github.com/gkampitakis/go-snaps
MIT License
158 stars 6 forks source link

fix: trying to solve issue #43 #44

Closed gkampitakis closed 2 years ago

gkampitakis commented 2 years ago

Trying fix in the most generic way the issue with snaps failing when being called from inside a test suite.

Testing with

package issues

import (
    "go-snaps-testing-suite/src/objects"
    "testing"

    "github.com/gkampitakis/go-snaps/snaps"
    "golang.org/x/tools/go/packages/packagestest"
)

func TestGoList(t *testing.T) { packagestest.TestAll(t, testMyFunc) }
func testMyFunc(t *testing.T, x packagestest.Exporter) {
    snaps.MatchSnapshot(t, "hello world from here")
}

func TestWithHelpers(t *testing.T) {
    objects.MyHelper(t, "hello george ")
}

and

package issues

import (
    "testing"

    "go-snaps-testing-suite/src/objects"

    "github.com/stretchr/testify/assert"
    "github.com/stretchr/testify/suite"
)

// Define the suite, and absorb the built-in basic suite
// functionality from testify - including a T() method which
// returns the current testing context
type ExampleTestSuite struct {
    suite.Suite
    VariableThatShouldStartAtFive int
}

// Make sure that VariableThatShouldStartAtFive is set to five
// before each test
func (suite *ExampleTestSuite) SetupTest() {
    suite.VariableThatShouldStartAtFive = 5
}

// All methods that begin with "Test" are run as tests within a
// suite.
func (suite *ExampleTestSuite) TestExample() {
    assert.Equal(suite.T(), 5, suite.VariableThatShouldStartAtFive)
}

func (suite *ExampleTestSuite) TestExampleSnapshot() {
    objects.MyHelper(suite.T(), "hello world")
}

// In order for 'go test' to run this suite, we need to create
// a normal test function and pass our suite to suite.Run
func TestExampleTestSuite(t *testing.T) {
    suite.Run(t, new(ExampleTestSuite))
}
package issues

import (
    "testing"

    "github.com/adamluzsi/testcase"
    "github.com/gkampitakis/go-snaps/snaps"
)

func Test_withTestcaseSpec(t *testing.T) {
    s := testcase.NewSpec(t)

    s.Test("hello world", func(tc *testcase.T) {
        tc.Must.True(true)

        snaps.MatchSnapshot(t, "hello world")
    })
}

Suites/Packages to support: