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

fix(vitest): split out tests #870

Merged
merged 21 commits into from
Sep 5, 2023
Merged

Conversation

kanadgupta
Copy link
Member

@kanadgupta kanadgupta commented Aug 23, 2023

🧰 Changes

This PR is branched off of #857 and splits out our test bed into two parts: single-threaded and multi-threaded. The tests that require different directory changes (i.e. they use process.chdir() have been moved into the former, while the latter contains the vast majority of all tests.

For the single-threaded tests, MSW has been introduced because nock wasn't working properly when attempting to parse and validate certain request bodies. The goal is to eventually introduce MSW across the entire repository, but that's not a priority at the moment.

🧬 QA & Testing

Do tests pass?

@kanadgupta kanadgupta changed the base branch from next to feat/vitest August 23, 2023 20:54
.github/workflows/ci.yml Outdated Show resolved Hide resolved
__tests__/helpers/get-gha-setup.ts Outdated Show resolved Hide resolved
__tests__/single-threaded/openapi/index.test.ts Outdated Show resolved Hide resolved
@kanadgupta kanadgupta changed the title Feat/vitest split tests fix(vitest): split out tests Sep 5, 2023
@esbuild/android-arm wasn't showing up in here, i think it got accidentally removed which is causing node 14 tests to break
@kanadgupta kanadgupta marked this pull request as ready for review September 5, 2023 21:57
@kanadgupta kanadgupta merged commit ed480ed into feat/vitest Sep 5, 2023
10 checks passed
@kanadgupta kanadgupta deleted the feat/vitest-split-tests branch September 5, 2023 22:01
erunion added a commit that referenced this pull request Sep 7, 2023
* feat(test): moving unit tests over to vitest

* fix: prettier issues

* ci: stop testing node 14

* fix: schema updater for prettier 3

* fix: install missing vitest coverage dep

* chore: better link

* ci: let other node versions run if one fails

* ci: try skipping some tests

* chore(deps): bump eslint config

* test: don't return in before* hooks

if you return a function within before* hooks, they'll run on teardown. so these functions are currently doing the opposite of what we're intending 😮‍💨

see: https://vitest.dev/api/#beforeall

* test: more before* hook fixes

* test: try using stubEnv in a few places

* chore: typo

* chore: rebuild lockfile using npm i

* chore: wait this happened after i ran "npm i" again?

* Revert "Merge branch 'next' into feat/vitest"

This reverts commit 22f7904, reversing
changes made to 3298545.

... weird. so i tried merging from next and reinstalling using `npm i`, which removed these packages and will cause node 14 tests to fail.... i hate it here

* fix(vitest): split out tests (#870)

* test: try splitting out tests

* ci: knip fix

* ci: oops

* chore: remove unused snapshots

* refactor: try using MSW instead of nock in single-threaded tests

* chore: temporarily don't worry about coverage 🤐

* chore: backfill headers-polyfill

* ci: re-enable tests on node 14

* test: add JSON error body

* ci: try matrix for threads

* ci: oops

* chore: copy edits

* chore: run build before tests

* fix(ci): split out ci and test steps

* chore: fix lockfile

* Revert "fix(ci): split out ci and test steps"

This reverts commit 112ec66.

* chore: clean out some comment junk

* chore: try fixing lockfile (again)

@esbuild/android-arm wasn't showing up in here, i think it got accidentally removed which is causing node 14 tests to break

* feat: better header checking

* fix: don't nest timers

* chore: remove unnecessary globals file

* chore: bumping eslint-config

---------

Co-authored-by: Kanad Gupta <[email protected]>
Co-authored-by: Kanad Gupta <[email protected]>
kanadgupta pushed a commit that referenced this pull request Sep 7, 2023
# [8.7.0-next.1](v8.6.6...v8.7.0-next.1) (2023-09-07)

### Features

* **test:** moving unit tests over to vitest ([#857](#857)) ([36d561b](36d561b)), closes [#870](#870)

[skip ci]
@kanadgupta kanadgupta mentioned this pull request May 1, 2024
kanadgupta added a commit that referenced this pull request May 1, 2024
## 🧰 Changes

> [!IMPORTANT]
> **this continues to be a vitest supremacy account 😤**

In this repo, we have tests that use `process.chdir()`, so we maintain a
separate Vitest config for running those via a
[`forks`](https://vitest.dev/config/#forks) pool vs. the standard
[`threads`](https://vitest.dev/config/#threads) pool — see
#870 for more background on this.

We've used two separate npm scripts (i.e., `npm run test:multi && npm
run test:single`) to run our tests sequentially. I discovered this
morning that [Vitest's workspaces
feature](https://vitest.dev/guide/workspace) isn't just for monorepos —
it's actually the recommended way to maintain multiple test
configurations no matter the context.

In this PR, I consolidated our two test configs into a single workspace
config. We get a few nice benefits by leveraging workspaces:
- No longer needing to manually pass in the correct config file when
running certain test files (e.g., `npx vitest --config
vitest.single-threaded.config.ts [file]`). In other words, `npx vitest
[file]` ✨ just works ✨, which should make it a lot easier for new
contributors to run tests
- Much cleaner test output — we now can see coverage across all files,
rather than two separate coverage reports[^1]
- Easier to share options between the two configs
- A single config file to rule them all
- Tests seem to be faster (but hard to say)

## 🧬 QA & Testing

Do all the tests run? And do they still run and pass properly? Here's
the latest test run in `next` for comparison:
https://github.com/readmeio/rdme/actions/runs/8910638856

[^1]: Small downside to this — [workspaces don't allow you to configure
coverage options](https://vitest.dev/guide/workspace#coverage). Not a
huge deal since our coverage is great in this repo and we can stick to
the defaults and it still addresses our needs.
kanadgupta pushed a commit that referenced this pull request Dec 6, 2024
# [9.0.0](v8.6.6...v9.0.0) (2024-12-06)

* feat!: deprecation notices for non-readme-refactored commands ([#1099](#1099)) ([732e32b](732e32b))
* feat!: drop node 18 ([#1085](#1085)) ([ebc2ac0](ebc2ac0))
* feat!: final v9 touchups ([#1106](#1106)) ([15447c5](15447c5)), closes [#1107](#1107)
* feat!: oclif (take 2) ([#1068](#1068)) ([5e05f93](5e05f93)), closes [#962](#962) [#1067](#1067) [/github.com/readmeio/rdme/blob/d01d76fe3c2e4a98b4f5c415be03e589fbe3b56e/.releaserc.yml#L30](https://github.com//github.com/readmeio/rdme/blob/d01d76fe3c2e4a98b4f5c415be03e589fbe3b56e/.releaserc.yml/issues/L30) [#1067](#1067)
* feat!: remove `validate`, deprecate/hide `open` ([#1072](#1072)) ([f1b46f6](f1b46f6))
* feat!: switch topic separator to space ([#1100](#1100)) ([13eb8ab](13eb8ab))

### Bug Fixes

* add better debugging for fetch failures ([a17f8da](a17f8da))
* add GITHUB_TOKEN ([e106e10](e106e10))
* attempt to use semantic-release/github instead of `gh` ([331d28b](331d28b))
* build `dist-gha/` files with every release ([f42392b](f42392b))
* bump semantic-release versions ([21efc66](21efc66))
* debug properly ([#1078](#1078)) ([5de0a4f](5de0a4f))
* **deps:** bump more deps ([#1042](#1042)) ([786a000](786a000))
* empty commit to trigger build ([51c1566](51c1566))
* empty commit to trigger build ([76efb7e](76efb7e))
* empty commit to trigger release ([3604f2a](3604f2a))
* fixed debug script ([#908](#908)) ([82c3541](82c3541))
* hide `ExperimentalWarning` ([#901](#901)) ([f9b5679](f9b5679))
* **npm:** tweak npm lifecycle scripts ([#1073](#1073)) ([35534db](35534db))
* oclif-friendly error logging ([#1080](#1080)) ([73c5f4c](73c5f4c))
* **openapi:** add spinner catch statement ([#961](#961)) ([4669b29](4669b29))
* **release:** track `dist-gha` assets properly ([b0934cb](b0934cb))
* **release:** track changes to commands doc directory ([78b6554](78b6554))
* swap out ts-node for tsx ([16f64b3](16f64b3))
* Update LICENSE for 2024 ([#963](#963)) ([23cf44b](23cf44b))
* use newest import attributes syntax ([#993](#993)) ([d76c0ae](d76c0ae)), closes [/github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md#2023-11-22-version-20100](https://github.com//github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md/issues/2023-11-22-version-20100)
* **versions/update:** various edge cases ([#965](#965)) ([580e307](580e307))

### chore

* type fixes for tests ([#903](#903)) ([d423b4c](d423b4c))

### Code Refactoring

* remove `oas`, `swagger`, `docs:edit` ([#902](#902)) ([9107d15](9107d15))

### Features

* add `@oclif/plugin-not-found`, other cleanups ([#1074](#1074)) ([6529b03](6529b03))
* add `title` flag to `openapi:convert` ([#1071](#1071)) ([1d71f3f](1d71f3f)), closes [#1068](#1068)
* convert to ESM (breaking change) ([#856](#856)) ([84b8571](84b8571)), closes [/www.stefanjudis.com/snippets/how-to-import-json-files-in-es-modules-node-js/#option-1](https://github.com//www.stefanjudis.com/snippets/how-to-import-json-files-in-es-modules-node-js//issues/option-1) [1#L228](https://github.com/1/issues/L228)
* **fetch:** use undici + `ProxyAgent`  ([#1000](#1000)) ([9da7132](9da7132)), closes [#999](#999)
* **openapi/convert:** support openapi in convert command ([#941](#941)) ([a33bbeb](a33bbeb))
* revamped `oclif`-powered docs ([#1081](#1081)) ([8a2833b](8a2833b))
* sort when syncing by parent ([#973](#973)) ([9795840](9795840))
* support `README_API_KEY` env var ([#950](#950)) ([bcf3f18](bcf3f18))
* support node 18 and up ([#900](#900)) ([a217904](a217904))
* **test:** moving unit tests over to vitest ([#857](#857)) ([36d561b](36d561b)), closes [#870](#870)
* use `actions/checkout@v4` everywhere ([#895](#895)) ([d30b71c](d30b71c))
* **versions:** flag parity with API, copy fixes ([#906](#906)) ([d424d9f](d424d9f))

### BREAKING CHANGES

* `rdme openapi` is deprecated and will be replaced in
`rdme@10` by a command with a simpler flag setup based on community
feedback.
* deprecates commands that are not supported in ReadMe
Refactored. For more information, please visit our migration guide:
https://github.com/readmeio/rdme/tree/v9/documentation/migration-guide.md

## 🧬 QA & Testing

Does the copy in these deprecation warnings make sense to you? Note that
the links will be broken for now since we haven't tagged a proper v9
release yet, but that will be fixed once this release is out!
* the topic separator (i.e., what separates a command
from its subcommand) has changed from a colon to a space by default. For
example, `rdme openapi:validate` is now `rdme openapi validate`. The
colon topic separator will continue to be supported so there is no need
to change any existing commands, but all documentation and help screens
will reflect the space topic separator.

## 🧬 QA & Testing

Do tests still pass?
* dropping support for Node.js v18. The minimum required
Node.js version is v20.10.0.
* `rdme validate` has been removed, use `rdme
openapi:validate` instead.
* `rdme open` is now deprecated

also updates our docs accordingly
* the `rdme` GitHub Actions is now a [the `node20` JavaScript action](https://docs.github.com/en/actions/sharing-automations/creating-actions/metadata-syntax-for-github-actions#runs-for-javascript-actions) rather than [a Docker container action](https://docs.github.com/en/actions/sharing-automations/creating-actions/metadata-syntax-for-github-actions#runs-for-docker-container-actions).
* `rdme` is now powered by [`oclif`](https://oclif.io/). The formatting and content of certain error messages and outputs may have changed. Please continue to only utilize exit codes to determine command successes/failures.

completed tasks:

- [x] a handful of tests are still failing, hoping that
oclif/test#652 gets merged in)
- [x] github actions dry runs are failing (but i got them working in
* **versions:** this flips the `isPublic` flag to `hidden`.
* removes several deprecated commands

* chore: knip cleanup

* chore: type fixes for tests
* removes several deprecated commands
* Node.js >= 18 required

[skip ci]
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.

2 participants