Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

index.js: Configurable reporter options for Formatter #49

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

wking
Copy link

@wking wking commented Jun 8, 2018

06efe96 (Fix xunit reporter, 2015-04-25) added a hard-coded empty object for the reporter options. This commit allows the user to override that with their own config, falling back to an empty object if the given value is falsy (for backwards compat with existing Formatter(...) callers).

If Formatter wasn't already taking a runtime-options argument, I would have preferred:

function Formatter (type, options) {
  // ...
  var runner = this.runner = new Runner((options || {}).runner)
  this.reporter = new reporters[type](
    this.runner,
    (options || {}).reporter || {},
  )
  Writable.call(this, (options || {}).runner)
  // ...
}

but we can't add runner namespacing to the existing options argument without breaking backwards compat or adding brittle heuristic translation. So I'm just adding a new option, where the reporter is namespaced to allow for other configurable aspects to also use the new argument (if we grow other configurable aspects in the future).

06efe96 (Fix xunit reporter, 2015-04-25) added a hard-coded empty
object for the reporter options.  This commit allows the user to
override that with their own config, falling back to an empty object
if the given value is falsy (for backwards compat with existing
Formatter(...) callers).

If Formatter wasn't already taking a runtime-options argument, I would
have preferred:

  function Formatter (type, options) {
    ...
    var runner = this.runner = new Runner((options || {}).runner)
    this.reporter = new reporters[type](
      this.runner,
      (options || {}).reporter || {},
    )
    Writable.call(this, (options || {}).runner)
    ...
  }

but we can't add 'runner' namespacing to the existing options argument
without breaking backwards compat or adding brittle heuristic
translation.  So I'm just adding a new option, where the reporter is
namespaced to allow for other configurable aspects to also use the new
argument (if we grow other configurable aspects in the future).
wking added a commit to wking/node-tap that referenced this pull request Jun 8, 2018
This PR depends on tapjs/tap-mocha-reporter#49; review that first.

This is inspired by [Mocha's][1]:

```
  --reporter-options <k=v,k2=v2,...>
```

Except:

* I'm using a JSON value for easier parsing and more explicit typing.
  This will end up using a few more characters, but the format is more
  explicit than Mocha's (which only uses string values?).  And callers
  are likely to already be familiar with JSON, so we save the mental
  overhead of teaching them a new serialization format.

* I'm using a 'reporter' namespace.  This allows us to add other
  namespaces in the future to address other configurable aspects of
  tap-mocha-reporter's Formatter.  For example, we could use this
  same CLI option to configure the runner.

Somewhat related to this, if we have plans for allowing multiple
reporters [2], we may want to namespace *those* now.  For example:

```
  --reporter-options {"reporter": {"progress": {"open": "(", "close": ")"}}}
```

to avoid the issues Mocha bumped into [3] when trying to add multi-reporter support.

[1]: https://mochajs.org/#usage
[2]: tapjs#335
[3]: mochajs/mocha#2184 (comment)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant