typelevel / weaver-test

A test framework that runs everything in parallel.
https://typelevel.org/weaver-test/
Other
46 stars 8 forks source link

Initialization bug with helpers over `test` #92

Closed zainab-ali closed 2 weeks ago

zainab-ali commented 2 weeks ago

This issue was copied over from: https://github.com/disneystreaming/weaver-test/issues/705 It was opened by: BalmungSan


I found a strange issue with weaver around initialization... or at least that is what I think. It is a bit involved but hopefully, I can provide enough info for someone to take a look.

// First, we need a base Suite with a bunch of helpers:
trait FooBaseSuite extends IOSuite:
  override final val maxParallelism: Int = 1
  override final type Res = FooRes
  override final val sharedResource: Resource[IO, Res] = ???

  // Define helper method to reduce boilerplate:
  protected def fooTest(name: String)(check: Foo => Expectations): Unit =
    test(name) { foo =>
      IO(check(foo))
    }

// Then we need an object that extends such base Suite:
object FooSpec extends FooBaseSuite:
  // And use the helper method:
  fooTest(name = "Testing foo") { foo =>
    expect(...)
  }

The tests will fail because Foo is already closed (or so I think).

There are a couple of ways to fix the issue:

  1. Don't have a trait + object but just a single object
  2. Remove the fooTest helper and replicate the boilerplate in each test
  3. Make FooSpec a class which accepts an (unused) GlobalRead

Things that didn't work:

More info:

zainab-ali commented 2 weeks ago

This comment was copied over from: https://github.com/disneystreaming/weaver-test/issues/705#issuecomment-1742086592 It was written by: Baccata


Hey BalmungSan, thanks for reporting, but the information provided is not sufficient to reproduce (ie, I tried to replicate and couldn't), and insufficient to guess what's going on.

Any chance you could attempt to create a minimal reproduction ? (I appreciate it may not be easy).

Are you running the test from SBT in your terminal, or from your IDE ?

zainab-ali commented 2 weeks ago

This comment was copied over from: https://github.com/disneystreaming/weaver-test/issues/705#issuecomment-1742103540 It was written by: BalmungSan


Hi Baccata thanks for looking into it.

Yeah, I know I should have come with a reproducer, but I have been a little bit busy. I will try to create one ASAP.

Meanwhile, I can provide with you a couple more details.

I am running the tests directly from sbt, using integrationTest/test (yes, they are in its own module). The resource I am running is a Docker container (using testcontainers-scala), which contains an HTTP app. And the reason why I think it is being closed is because the test fails with an "empty response" error.

zainab-ali commented 2 weeks ago

Closing as a duplicate.