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

feat(src): add support for "only", "skip", and "title" test options in fixtures #90

Merged

Conversation

Xunnamius
Copy link
Collaborator

@Xunnamius Xunnamius commented Sep 29, 2022

What: This PR allows fixture options.json configurations to support only, skip, and title properties, which act identically to their Test Object counterparts.

Why: Some Test Object properties can be useful for fixtures too, namely: only and skip for running a subset of fixtures and title for using a custom title instead of the name of the fixture's directory.

How: Extract and apply only, skip, and title properties from options.json.

Additionally, in the accompanying PR for updating the README, I've updated the fixtures documentation to include these new capabilities along with some changes to the verbiage for clarity and accuracy.

Unverified

No user is associated with the committer email.
…n fixtures
@Xunnamius Xunnamius force-pushed the contrib-feat-only-skip-title branch from 5f0f1f2 to 72a6e6d Compare October 9, 2022 14:37
@Xunnamius Xunnamius merged commit 89b58b5 into babel-utils:master Oct 9, 2022
@Xunnamius Xunnamius deleted the contrib-feat-only-skip-title branch October 9, 2022 14:37
Xunnamius added a commit that referenced this pull request Jan 16, 2023

Unverified

No user is associated with the committer email.
## [11.0.0-canary.1](v10.1.0...v11.0.0-canary.1) (2023-01-16)

### 💥 BREAKING CHANGES 💥

* In previous versions, the lodash.mergeWith customizer skipped source properties
  that resolved to `undefined`. With this version, the customizer now unsets these properties
  (sets them to `undefined`), allowing the end user to easily unset defaults (e.g. `filename`).

* `babelOptions.filename` is now set to `filepath`
  by default rather than `undefined`.

* **Implicit "global" options merging is no longer supported**

  In previous versions of babel-plugin-tester, any test object and fixture
  configuration option could be passed directly to babel-plugin-tester and apply
  "globally" across all test objects and fixtures. This was even the case for
  options that made no sense in a "global" context, such as `only`, `skip`, and
  `code`. In this version of babel-plugin-tester, only options explicitly listed
  in the documentation can be passed directly and applied globally. Unrecognized
  "rest" options are silently ignored.

* **Test/fixture configuration is resolved early and consistently**

  In previous versions of babel-plugin-tester, test object and fixture
  configuration options were resolved in various places, with some options getting
  finalized before `it(...)` and `describe(...)` were called and others being
  determined as Jest was executing the test. In this version, all configuration
  options are resolved and finalized before `it(...)` and `describe(...)` are
  called. This also means configurations are finalized _before_ hooks like
  `beforeAll` get called by the testing framework.

* **Fixture configuration schema is standardized**

  In previous versions of babel-plugin-tester, you could provide any key to
  `options.json` and it would be passed as-is to the plugin under test. This made
  it impossible to allow fixtures to be configured with the same flexibility as
  test objects. In this version of babel-plugin-tester, fixture `options.json`
  (and `options.js`) files must return a standard set of options. Non-standard
  properties are silently ignored. For instance: to pass options to the plugin
  under test, they must be provided via `pluginOptions`.

* **Global `setup`/`teardown` no longer overwrites local versions**

  In previous versions of babel-plugin-tester, test-level `setup` and `teardown`
  functions overrode global `setup` and `teardown` functions. In this version of
  babel-plugin-tester, the global `setup` and `teardown` functions will be called
  alongside their test-level counterparts for each test and in a well-defined
  order (see documentation).

* **`TypeError` for config error; `AssertionError` for test error**

  All configuration-related issues now throw `TypeError` instead of
  `AssertionError`. `AssertionError` is now exclusively used for failing tests.
  Additionally, the text of some error messages has been updated.

* **`error` only captures exceptions from Babel**

  `error` (aka `throws`) no longer potentially captures exceptions thrown by the
  `formatResult` function. If the `formatResult` function throws, the entire test
  will fail immediately.

* **`error` no longer accepts arbitrary class constructors**

  `error` (aka `throws`) no longer accepts arbitrary class constructors. Any
  provided class constructor must extend `Error`, e.g. built-ins like
  `SyntaxError` or custom error classes like `class MyError extends Error`. Thanks
  to the nature of JavaScript, **providing a class constructor that does not
  extend `Error` will lead to undefined behavior**.

* **Built-in TypeScript support**

  TypeScript types are now included within the package itself, obviating the need
  to install a separate types package. Installing the old types package alongside
  this version of babel-plugin-tester will cause conflicts.

* **Global `describe` and `it` functions must be defined**

  babel-plugin-tester will refuse to run if `describe`, `it`, `it.only`, or
  `it.skip` are not globally available.

* **All test titles are now numbered**

  All test titles are now numbered (e.g. `"1. ..."`, `"2. ..."`, etc), including
  fixtures tests and tests with custom titles.

* Minimum recommended node version bumped from
  10.13.0 to 14.20.0

* Plugin names are once again automatically determined
  by analyzing the return value of the plugin function. Though this is
  implemented in a backwards-compatible way, there is a
  [small caveat](https://github.com/babel-utils/babel-plugin-tester#pluginname-inference-caveat).

#### ✨ Features

* Add support for testing presets ([73b90b3](73b90b3))
* Implement default filepath inference using Error stack trace ([9d1b321](9d1b321))
* **src:** add `exec`/`execFixture` support via Node's VM module ([4754f42](4754f42))
* **src:** add support for "only", "skip", and "title" test options in fixtures ([#90](#90)) ([89b58b5](89b58b5))
* **src:** add support for arbitrary run order of plugin under test ([#91](#91)) ([8c8b858](8c8b858))
* **src:** add support for loading prettier configuration files in fixtures ([f54deda](f54deda))
* **src:** add TEST_SKIP/TEST_NUM_SKIP/TEST_ONLY/TEST_NUM_ONLY env variable support ([13626d1](13626d1))
* **src:** bring back (lightweight) plugin name inference ([#92](#92)) ([f9ad903](f9ad903))
* **src:** implement `titleNumbering` and `restartTitleNumbering` options ([09e792d](09e792d))
* **src:** implement standard `setup`/`teardown` run order ([4ea283f](4ea283f))
* **src:** provide debug output support via debug package ([4c7c6e7](4c7c6e7))
* Windows support ([f214995](f214995))

#### 🪄 Fixes

* **src:** ensure test function errors are not swallowed by teardown function errors ([2acfe37](2acfe37))
* **src:** fix fixtureOutputExt being ignored in root options.json ([#89](#89)) ([481be19](481be19))
* **src:** fix plugin run order for fixtures to match tests ([#88](#88)) ([fbb6c19](fbb6c19))

#### ⚙️ Build system

* **deps:** bump prettier from 2.8.0 to 2.8.1 ([#98](#98)) ([0bdb351](0bdb351))
* **package:** restore @babel/core@7.11.6 as minimum supported version ([00712c0](00712c0))
* Transmute codebase to TypeScript ([#96](#96)) ([5f588e9](5f588e9))
* Update tooling ([d5b4d9c](d5b4d9c))

#### 🔥 Reverted

* *"test: make debugging names shorter and sweeter"* ([0b869bb](0b869bb))

#### 🧙🏿 Refactored

* Lodash.mergeWith customizer now allows unsetting options by setting them to `undefined` ([74af680](74af680))
* Reorganize source into unified extensible tester pipeline w/ first-class fixtures support ([0c44392](0c44392))
Xunnamius added a commit that referenced this pull request Jan 16, 2023

Verified

This commit was signed with the committer’s verified signature. The key has expired.
MylesBorins Myles Borins
## [11.0.0-canary.1](v10.1.0...v11.0.0-canary.1) (2023-01-16)

### 💥 BREAKING CHANGES 💥

* In previous versions, the lodash.mergeWith customizer skipped source properties
  that resolved to `undefined`. With this version, the customizer now unsets these properties
  (sets them to `undefined`), allowing the end user to easily unset defaults (e.g. `filename`).

* `babelOptions.filename` is now set to `filepath`
  by default rather than `undefined`.

* **Implicit "global" options merging is no longer supported**

  In previous versions of babel-plugin-tester, any test object and fixture
  configuration option could be passed directly to babel-plugin-tester and apply
  "globally" across all test objects and fixtures. This was even the case for
  options that made no sense in a "global" context, such as `only`, `skip`, and
  `code`. In this version of babel-plugin-tester, only options explicitly listed
  in the documentation can be passed directly and applied globally. Unrecognized
  "rest" options are silently ignored.

* **Test/fixture configuration is resolved early and consistently**

  In previous versions of babel-plugin-tester, test object and fixture
  configuration options were resolved in various places, with some options getting
  finalized before `it(...)` and `describe(...)` were called and others being
  determined as Jest was executing the test. In this version, all configuration
  options are resolved and finalized before `it(...)` and `describe(...)` are
  called. This also means configurations are finalized _before_ hooks like
  `beforeAll` get called by the testing framework.

* **Fixture configuration schema is standardized**

  In previous versions of babel-plugin-tester, you could provide any key to
  `options.json` and it would be passed as-is to the plugin under test. This made
  it impossible to allow fixtures to be configured with the same flexibility as
  test objects. In this version of babel-plugin-tester, fixture `options.json`
  (and `options.js`) files must return a standard set of options. Non-standard
  properties are silently ignored. For instance: to pass options to the plugin
  under test, they must be provided via `pluginOptions`.

* **Global `setup`/`teardown` no longer overwrites local versions**

  In previous versions of babel-plugin-tester, test-level `setup` and `teardown`
  functions overrode global `setup` and `teardown` functions. In this version of
  babel-plugin-tester, the global `setup` and `teardown` functions will be called
  alongside their test-level counterparts for each test and in a well-defined
  order (see documentation).

* **`TypeError` for config error; `AssertionError` for test error**

  All configuration-related issues now throw `TypeError` instead of
  `AssertionError`. `AssertionError` is now exclusively used for failing tests.
  Additionally, the text of some error messages has been updated.

* **`error` only captures exceptions from Babel**

  `error` (aka `throws`) no longer potentially captures exceptions thrown by the
  `formatResult` function. If the `formatResult` function throws, the entire test
  will fail immediately.

* **`error` no longer accepts arbitrary class constructors**

  `error` (aka `throws`) no longer accepts arbitrary class constructors. Any
  provided class constructor must extend `Error`, e.g. built-ins like
  `SyntaxError` or custom error classes like `class MyError extends Error`. Thanks
  to the nature of JavaScript, **providing a class constructor that does not
  extend `Error` will lead to undefined behavior**.

* **Built-in TypeScript support**

  TypeScript types are now included within the package itself, obviating the need
  to install a separate types package. Installing the old types package alongside
  this version of babel-plugin-tester will cause conflicts.

* **Global `describe` and `it` functions must be defined**

  babel-plugin-tester will refuse to run if `describe`, `it`, `it.only`, or
  `it.skip` are not globally available.

* **All test titles are now numbered**

  All test titles are now numbered (e.g. `"1. ..."`, `"2. ..."`, etc), including
  fixtures tests and tests with custom titles.

* Minimum recommended node version bumped from
  10.13.0 to 14.20.0

* Plugin names are once again automatically determined
  by analyzing the return value of the plugin function. Though this is
  implemented in a backwards-compatible way, there is a
  [small caveat](https://github.com/babel-utils/babel-plugin-tester#pluginname-inference-caveat).

#### ✨ Features

* Add support for testing presets ([73b90b3](73b90b3))
* Implement default filepath inference using Error stack trace ([9d1b321](9d1b321))
* **src:** add `exec`/`execFixture` support via Node's VM module ([4754f42](4754f42))
* **src:** add support for "only", "skip", and "title" test options in fixtures ([#90](#90)) ([89b58b5](89b58b5))
* **src:** add support for arbitrary run order of plugin under test ([#91](#91)) ([8c8b858](8c8b858))
* **src:** add support for loading prettier configuration files in fixtures ([f54deda](f54deda))
* **src:** add TEST_SKIP/TEST_NUM_SKIP/TEST_ONLY/TEST_NUM_ONLY env variable support ([13626d1](13626d1))
* **src:** bring back (lightweight) plugin name inference ([#92](#92)) ([f9ad903](f9ad903))
* **src:** implement `titleNumbering` and `restartTitleNumbering` options ([09e792d](09e792d))
* **src:** implement standard `setup`/`teardown` run order ([4ea283f](4ea283f))
* **src:** provide debug output support via debug package ([4c7c6e7](4c7c6e7))
* Windows support ([f214995](f214995))

#### 🪄 Fixes

* **src:** ensure test function errors are not swallowed by teardown function errors ([2acfe37](2acfe37))
* **src:** fix fixtureOutputExt being ignored in root options.json ([#89](#89)) ([481be19](481be19))
* **src:** fix plugin run order for fixtures to match tests ([#88](#88)) ([fbb6c19](fbb6c19))

#### ⚙️ Build system

* **deps:** bump prettier from 2.8.0 to 2.8.1 ([#98](#98)) ([0bdb351](0bdb351))
* **package:** restore @babel/core@7.11.6 as minimum supported version ([00712c0](00712c0))
* Transmute codebase to TypeScript ([#96](#96)) ([5f588e9](5f588e9))
* Update tooling ([d5b4d9c](d5b4d9c))

#### 🔥 Reverted

* *"test: make debugging names shorter and sweeter"* ([0b869bb](0b869bb))

#### 🧙🏿 Refactored

* Lodash.mergeWith customizer now allows unsetting options by setting them to `undefined` ([74af680](74af680))
* Reorganize source into unified extensible tester pipeline w/ first-class fixtures support ([0c44392](0c44392))
@Xunnamius
Copy link
Collaborator Author

🎉 This PR is included in version 11.0.0-canary.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

Xunnamius added a commit that referenced this pull request Jan 18, 2023

Verified

This commit was signed with the committer’s verified signature. The key has expired.
MylesBorins Myles Borins
## [11.0.0](v10.1.0...v11.0.0) (2023-01-18)

### 💥 BREAKING CHANGES 💥

* In previous versions, the lodash.mergeWith customizer skipped source properties
  that resolved to `undefined`. With this version, the customizer now unsets these properties
  (sets them to `undefined`), allowing the end user to easily unset defaults (e.g. `filename`).

* `babelOptions.filename` is now set to `filepath`
  by default rather than `undefined`.

* **Implicit "global" options merging is no longer supported**

  In previous versions of babel-plugin-tester, any test object and fixture
  configuration option could be passed directly to babel-plugin-tester and apply
  "globally" across all test objects and fixtures. This was even the case for
  options that made no sense in a "global" context, such as `only`, `skip`, and
  `code`. In this version of babel-plugin-tester, only options explicitly listed
  in the documentation can be passed directly and applied globally. Unrecognized
  "rest" options are silently ignored.

* **Test/fixture configuration is resolved early and consistently**

  In previous versions of babel-plugin-tester, test object and fixture
  configuration options were resolved in various places, with some options getting
  finalized before `it(...)` and `describe(...)` were called and others being
  determined as Jest was executing the test. In this version, all configuration
  options are resolved and finalized before `it(...)` and `describe(...)` are
  called. This also means configurations are finalized _before_ hooks like
  `beforeAll` get called by the testing framework.

* **Fixture configuration schema is standardized**

  In previous versions of babel-plugin-tester, you could provide any key to
  `options.json` and it would be passed as-is to the plugin under test. This made
  it impossible to allow fixtures to be configured with the same flexibility as
  test objects. In this version of babel-plugin-tester, fixture `options.json`
  (and `options.js`) files must return a standard set of options. Non-standard
  properties are silently ignored. For instance: to pass options to the plugin
  under test, they must be provided via `pluginOptions`.

* **Global `setup`/`teardown` no longer overwrites local versions**

  In previous versions of babel-plugin-tester, test-level `setup` and `teardown`
  functions overrode global `setup` and `teardown` functions. In this version of
  babel-plugin-tester, the global `setup` and `teardown` functions will be called
  alongside their test-level counterparts for each test and in a well-defined
  order (see documentation).

* **`TypeError` for config error; `AssertionError` for test error**

  All configuration-related issues now throw `TypeError` instead of
  `AssertionError`. `AssertionError` is now exclusively used for failing tests.
  Additionally, the text of some error messages has been updated.

* **`error` only captures exceptions from Babel**

  `error` (aka `throws`) no longer potentially captures exceptions thrown by the
  `formatResult` function. If the `formatResult` function throws, the entire test
  will fail immediately.

* **`error` no longer accepts arbitrary class constructors**

  `error` (aka `throws`) no longer accepts arbitrary class constructors. Any
  provided class constructor must extend `Error`, e.g. built-ins like
  `SyntaxError` or custom error classes like `class MyError extends Error`. Thanks
  to the nature of JavaScript, **providing a class constructor that does not
  extend `Error` will lead to undefined behavior**.

* **Built-in TypeScript support**

  TypeScript types are now included within the package itself, obviating the need
  to install a separate types package. Installing the old types package alongside
  this version of babel-plugin-tester will cause conflicts.

* **Global `describe` and `it` functions must be defined**

  babel-plugin-tester will refuse to run if `describe`, `it`, `it.only`, or
  `it.skip` are not globally available.

* **All test titles are now numbered**

  All test titles are now numbered (e.g. `"1. ..."`, `"2. ..."`, etc), including
  fixtures tests and tests with custom titles.

* Minimum recommended node version bumped from
  10.13.0 to 14.20.0

* Plugin names are once again automatically determined
  by analyzing the return value of the plugin function. Though this is
  implemented in a backwards-compatible way, there is a
  [small caveat](https://github.com/babel-utils/babel-plugin-tester#pluginname-inference-caveat).

#### ✨ Features

* Add support for testing presets ([73b90b3](73b90b3))
* Implement default filepath inference using Error stack trace ([9d1b321](9d1b321))
* **src:** add `exec`/`execFixture` support via Node's VM module ([4754f42](4754f42))
* **src:** add support for "only", "skip", and "title" test options in fixtures ([#90](#90)) ([89b58b5](89b58b5))
* **src:** add support for arbitrary run order of plugin under test ([#91](#91)) ([8c8b858](8c8b858))
* **src:** add support for loading prettier configuration files in fixtures ([f54deda](f54deda))
* **src:** add TEST_SKIP/TEST_NUM_SKIP/TEST_ONLY/TEST_NUM_ONLY env variable support ([13626d1](13626d1))
* **src:** bring back (lightweight) plugin name inference ([#92](#92)) ([f9ad903](f9ad903))
* **src:** implement `titleNumbering` and `restartTitleNumbering` options ([09e792d](09e792d))
* **src:** implement standard `setup`/`teardown` run order ([4ea283f](4ea283f))
* **src:** provide debug output support via debug package ([4c7c6e7](4c7c6e7))
* Windows support ([f214995](f214995))

#### 🪄 Fixes

* **src:** ensure test function errors are not swallowed by teardown function errors ([2acfe37](2acfe37))
* **src:** fix fixtureOutputExt being ignored in root options.json ([#89](#89)) ([481be19](481be19))
* **src:** fix plugin run order for fixtures to match tests ([#88](#88)) ([fbb6c19](fbb6c19))

#### ⚙️ Build system

* **deps:** bump prettier from 2.8.0 to 2.8.1 ([#98](#98)) ([0bdb351](0bdb351))
* **package:** restore @babel/core@7.11.6 as minimum supported version ([00712c0](00712c0))
* Transmute codebase to TypeScript ([#96](#96)) ([5f588e9](5f588e9))
* Update tooling ([d5b4d9c](d5b4d9c))

#### 🔥 Reverted

* *"test: make debugging names shorter and sweeter"* ([0b869bb](0b869bb))

#### 🧙🏿 Refactored

* Lodash.mergeWith customizer now allows unsetting options by setting them to `undefined` ([74af680](74af680))
* Reorganize source into unified extensible tester pipeline w/ first-class fixtures support ([0c44392](0c44392))
@Xunnamius
Copy link
Collaborator Author

🎉 This PR is included in version 11.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant