rtfeldman / node-test-runner

Runs elm-test suites from Node.js. Get it with npm install -g elm-test

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Question about the behavior related to duplicate descriptions error and automatic description level added with the module name?

mpizenberg opened this issue · comments

When the error for duplicate descriptions was introduced, it was in part to get rid of potential copy-paste descriptions for more useful failure messages.

In node-test-runner, all tests are aggregated with their module name prepended to each test description. As a result, potential copy pasted descriptions across test files are not detected. In elm-test-rs, we do not prepend the module name to the description, causing behavior differences such as tests failing in elm-test-rs with duplicate descriptions errors. Although annoying to fix, which would be improved with this PR, @avh4 acknowledged that "In all cases, the duplicate describe names were a mistake".

I must admit that initially my reason for this behavior change was not to catch duplicate descriptions. It was for two reasons, (1) because I didn't like having labels in the failure reports that were never set by the user themselves, especially knowing that it's easy to add a suite = describe "This.Module" [ allExposedTests... ], and (2) because it resulted in simpler code in the tests runner.

Now knowing that it has the following advantages:

  • be explicit about your tests descriptions
  • potentially catch copy-paste errors
  • simpler test runner code

would node-test-runner be willing to change that behavior at the next breaking update? Or are there other advantages than copy-paste commodity that I didn't saw making it worth staying as is?

node-test-runner’s current behavior also has an edge case quirk: If you try to name a test the same as its module you get a somewhat confusing error.

module TestsPassing exposing (myTest)

import Expect
import Test exposing (test)


myTest =
    test "TestsPassing" <|
        \() ->
                Expect.equal 1 1
The test 'TestsPassing' contains a child test of the same name. Let's rename them so we know which is which.
commented

I actually need to know the module name. So if this gets removed, it would be nice to get a new field with that information. As we can also deduct the filepath from it.

@mpizenberg did the module name get removed?

@harrysarson no, not in elm-test, just that we are trying integration of elm-test-rs in the language server, which is extracting the module name from the root label of a description. Thus @razzeee comment.