smartystreets / goconvey

Go testing in the browser. Integrates with `go test`. Write behavioral tests in Go.
http://smartystreets.github.io/goconvey/
Other
8.23k stars 554 forks source link

Panic when running goconvey tests with go 1.9 #497

Open vincentdaniel opened 7 years ago

vincentdaniel commented 7 years ago

I get a panic error when I try to use goconvey with go 1.9 on linux. The same code works for version 1.8.3.

I'm using the simple example from the documentation:

package controller

import (
    "testing"

    . "github.com/smartystreets/goconvey/convey"
)

func TestSpec(t *testing.T) {

    // Only pass t into top-level Convey calls
    Convey("Given some integer with a starting value", t, func() {
        x := 1

        Convey("When the integer is incremented", func() {
            x++

            Convey("The value should be greater by one", func() {
                So(x, ShouldEqual, 2)
            })
        })
    })
}

With go 1.9, I get the following error:

> go version
go version go1.9 linux/amd64
> go test -v ./...
[?      my-app  [no test files]
?       my-app/node_modules/gulp-go/sample  [no test files]
?       my-app/server   [no test files]
?       my-app/server/common    [no test files]]
=== RUN   TestSpec

  Given some integer with a starting value 

0 total assertions

--- FAIL: TestSpec (0.00s)
panic: Top-level calls to Convey(...) need a reference to the *testing.T.
        Hint: Convey("description here", t, func() { /* notice that the second argument was the *testing.T (t)! */ })  [recovered]
    panic: Top-level calls to Convey(...) need a reference to the *testing.T.
        Hint: Convey("description here", t, func() { /* notice that the second argument was the *testing.T (t)! */ })  [recovered]
    panic: Top-level calls to Convey(...) need a reference to the *testing.T.
        Hint: Convey("description here", t, func() { /* notice that the second argument was the *testing.T (t)! */ }) 

goroutine 5 [running]:
testing.tRunner.func1(0xc4200a43c0)
    /usr/local/go/src/testing/testing.go:711 +0x2d2
panic(0x799f20, 0xc420196b40)
    /usr/local/go/src/runtime/panic.go:491 +0x283
github.com/smartystreets/goconvey/convey.(*context).conveyInner.func2(0xc420066f60)
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/context.go:232 +0x1c8
panic(0x799f20, 0xc420196b40)
    /usr/local/go/src/runtime/panic.go:491 +0x283
github.com/smartystreets/goconvey/convey.conveyPanic(0x8246ea, 0xb3, 0x0, 0x0, 0x0)
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/context.go:20 +0xca
github.com/smartystreets/goconvey/convey.rootConvey(0xc420047b30, 0x2, 0x2)
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/context.go:91 +0x416
github.com/smartystreets/goconvey/convey.Convey(0xc420047b30, 0x2, 0x2)
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/doc.go:75 +0x7a
my-app/server/controller.TestSpec.func1()
    /home/vdaniel/dev/go/src/my-app/server/controller/progressController_test.go:15 +0xeb
github.com/smartystreets/goconvey/convey.parseAction.func1(0x9f8600, 0xc420066f60)
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/discovery.go:80 +0x24
github.com/smartystreets/goconvey/convey.(*context).conveyInner(0xc420066f60, 0x81dcbc, 0x28, 0xc4201c61c0)
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/context.go:261 +0x162
github.com/smartystreets/goconvey/convey.rootConvey.func1()
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/context.go:110 +0xec
github.com/jtolds/gls.(*ContextManager).SetValues.func1(0x0)
    /home/vdaniel/dev/go/src/github.com/jtolds/gls/context.go:97 +0x463
github.com/jtolds/gls.EnsureGoroutineId.func1()
    /home/vdaniel/dev/go/src/github.com/jtolds/gls/gid.go:24 +0x31
github.com/jtolds/gls._m(0x0, 0xc4200f7a20)
    /home/vdaniel/dev/go/src/github.com/jtolds/gls/stack_tags.go:74 +0x31
github.com/jtolds/gls.github_com_jtolds_gls_markS(0x0, 0xc4200f7a20)
    /home/vdaniel/dev/go/src/github.com/jtolds/gls/stack_tags.go:54 +0x35
github.com/jtolds/gls.addStackTag(0x0, 0xc4200f7a20)
    /home/vdaniel/dev/go/src/github.com/jtolds/gls/stack_tags.go:49 +0x3a
github.com/jtolds/gls.EnsureGoroutineId(0xc420196ab0)
    /home/vdaniel/dev/go/src/github.com/jtolds/gls/gid.go:24 +0xc9
github.com/jtolds/gls.(*ContextManager).SetValues(0xc4201c6170, 0xc420196a50, 0xc4200f79e0)
    /home/vdaniel/dev/go/src/github.com/jtolds/gls/context.go:63 +0x177
github.com/smartystreets/goconvey/convey.rootConvey(0xc420035f68, 0x3, 0x3)
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/context.go:105 +0x2d6
github.com/smartystreets/goconvey/convey.Convey(0xc420035f68, 0x3, 0x3)
    /home/vdaniel/dev/go/src/github.com/smartystreets/goconvey/convey/doc.go:75 +0x7a
my-app/server/controller.TestSpec(0xc4200a43c0)
    /home/vdaniel/dev/go/src/my-app/server/controller/progressController_test.go:12 +0xa6
testing.tRunner(0xc4200a43c0, 0x828cf0)
    /usr/local/go/src/testing/testing.go:746 +0xd0
created by testing.(*T).Run
    /usr/local/go/src/testing/testing.go:789 +0x2de
FAIL    my-app/server/controller    0.011s
?       my-app/server/logs  [no test files]
?       my-app/server/model [no test files]

With go 1.8.3, it works:

> go version
go version go1.8.3 linux/amd64
> go test -v ./...
?       my-app  [no test files]
?       my-app/node_modules/gulp-go/sample  [no test files]
?       my-app/server   [no test files]
?       my-app/server/common    [no test files]
=== RUN   TestSpec

  Given some integer with a starting value 
    When the integer is incremented 
      The value should be greater by one ✔

1 total assertion

--- PASS: TestSpec (0.00s)
PASS

...

I'm running it on Ubuntu 16.04.3 LTS (Xenial Xerus).

Feel free to ask any additionnal information you might need to reproduce this issue.

leeola commented 7 years ago

Same issue, Go 1.9 OSX.

dannolan commented 7 years ago

I'm having the same issue, Go 1.9 on OS X. I had to do brew install go@1.8 and remove other versions to get my tests working again.

dynamix commented 7 years ago

Goconvey relies on https://github.com/jtolds/gls for a go routine local stack to pass its context around. Only the latest version of gls works properly with 1.9. So I guess you might want to update @dannolan, @leeola , @vincentdaniel.

oliveagle commented 6 years ago

same here. https://github.com/jtolds/gls at master branch 77f18212c9c7edc9bd6a33d383a7b545ce62f064

image

leeola commented 6 years ago

@oliveagle When dynamix told me to update, I gotbb0351aa7eb6f322f32667d51375f26a2bca6628 and it worked for me without issues.

Not countering your comment, just hoping to help - maybe the above commit will work for you?

oliveagle commented 6 years ago

bb0351aa7eb6f322f32667d51375f26a2bca6628 still crashes...

this is how I crash it.


import (
    "github.com/stretchr/testify/assert"
    "testing"
)

func TestHahah(t *testing.T) {
    a := struct {Name string} {"a"}
    b := struct {Name string} {"b"}
    assert.Equal(t, a, b)
}
B3rs commented 6 years ago

I'm having the same issue, Go 1.9 and Linux... Like @oliveagle I use stretchr's assert library

ahdai0718 commented 6 years ago

It works for me after the command below

go get -u github.com/smartystreets/goconvey

go version go1.9 darwin/amd64 / OS X 10.12.6

B3rs commented 6 years ago

this solved my issue too thanks @ahdai0718

MelleKoning commented 6 years ago

Have this issue on windows10 go 1.9 as well

nkovacs commented 6 years ago

If you've updated gls and you're still getting this, delete $GOPATH/pkg/linux_amd64 (or whatever your OS/arch is). I had a vendored version of gls in there in one of my projects.

cpjolicoeur commented 5 years ago

Just following up as it appears this ticket is still open. This still happens, and with Go 1.10 now as well (which could be assumed as it was introduced with 1.9).

marwan-at-work commented 5 years ago

I'm running into the same issue. I tried updating both goconvey and gls but neither helped resolve the issue.

gedge commented 5 years ago

FYI: I had this issue after updating to go1.12 (out today!); I needed to govendor update github.com/jtolds/gls before it worked again

sgnn7 commented 5 years ago

@gedge Hitting the same problem with Golang 1.12 as well. ~Since we're using the new go modules, we can't just update gls (latest 4.20 tag is not semver format so go mod doesn't detect it)~

Edit: I was able to update gls using the branch identifier and it works: go get -u github.com/jtolds/gls@master

Dieterbe commented 5 years ago

this does it for me using Gopkg.toml (dep)

[[override]]
  name = "github.com/jtolds/gls"
  revision = "b4936e06046bbecbb94cae9c18127ebe510a2cb9"