nvim-neotest / neotest-go

MIT License
124 stars 43 forks source link

Table tests not recognized when defined inside for-loop #86

Open fredrikaverpil opened 3 months ago

fredrikaverpil commented 3 months ago

I just noticed that when you define your table tests like this, neotest-go does not recognize individual tests in the table:

func TestSomething(t *testing.T) {
    t.Parallel()
    t.Run("subtest of table tests", func(t *testing.T) {
        t.Parallel()
        for _, tt := range []struct {
            name string
        }{
            {
                name: "missing",
            },
            {
                name: "invalid",
            },
            {
                name: "wildcard not allowed",
            },
        } {
            tt := tt
            t.Run(tt.name, func(t *testing.T) {
                t.Parallel()
                // Act
                // Assert
            })
        }
    })
}

By rewriting them on the form seen in https://github.com/nvim-neotest/neotest-go/blob/main/neotest_go/many_table_test.go fixes the issue. But when you enter a large pre-existing codebase where table tests are defined this way, this is not a helpful workaround as it's hard to motivate refactoring hundreds of tests for this purpose.

I haven't looked into how neotest-go figures out that there are table tests. Treesitter AST inspection?

JamesTeague commented 3 months ago

It will run for me but it will mark tests as failed. For example: If I run only the method it will ALWAYS fail. If I run the whole file it will ALWAYS pass.

This is regardless of the correctness of the tests.

That is incorrect. If I have my cursor on the line above the method and run the test on the method if will pass but if my cursor is on the method signature it fails.

fredrikaverpil commented 1 week ago

@JamesTeague I just added support for this in https://github.com/fredrikaverpil/neotest-golang in case you were also looking for this.