k0pernikus
k0pernikus

Reputation: 66599

How to only run tests not having a certain tag in scala using flatspec through sbt?

As a scala beginner, I want to tag the integration tests in order to exclude them from running in certain scenarios (as they can be quite slow and might break due to external changes/problems).

I created the tag integration this way:

import org.scalatest.{FlatSpec, Matchers, Tag}
object integration extends Tag("com.dreamlines.tags.integration")

In my test I tag a test like so:

class SchemaValidation extends FlatSpec with Matchers {
  it should "return valid json" taggedAs (integration) in {
    ...
    assertSchema(response, endpointSchema)
  }
}

Yet when reading up on how to filter certain tests based on the tag in the docs, I get highly confused as suddenly I read that I should be using org.scalatest.tools.Runner

scala [-cp scalatest-<version>.jar:...] org.scalatest.tools.Runner [arguments]

which has the flags I am looking for:

-l specifies a tag to exclude (Note: only one tag name allowed per -l) -l SlowTests -l PerfTests

Yet I am only used to run my tests via:

sbt test

I have no idea what the scala test runner here is referring to or what goes on under the hood when I run sbt test. I am truly lost.

I was expecting to execute the tests not entirely unlike this:

sbt test --ignore-tag integration

Upvotes: 2

Views: 888

Answers (1)

G&#225;bor Bakos
G&#225;bor Bakos

Reputation: 9100

According to the sbt documentation on test options the following should work for you:

testOnly -- -l integration

Or in case ScalaTest uses the fully qualified tag id:

testOnly -- -l com.dreamlines.tags.integration

In case you want to do this by default, you can adjust the testOptions in the build.sbt file.

Edit:

You might consider a different approach for integration test. Instead of tagging them, you might want to put them in the src/it/{scala|resources} folders.

Upvotes: 7

Related Questions