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

test: consuming this library in various scenarios #164

Open
wants to merge 18 commits into
base: master
Choose a base branch
from

Conversation

pkerschbaum
Copy link
Contributor

@pkerschbaum pkerschbaum commented Nov 19, 2022

Problem

tiny-invariant should compile and run in various setups. Be it Node-CJS, Node-ESM, TypeScript projects with various configurations, in Browsers, etc.
On this matter we had some troubles in the past (#144, #151) and we have a new issue (#162).
Iterating on this topic - package consumption in different scenarios - is difficult and error-prone at the moment.

Proposed Solution

Add tests which validate that tiny-invariant compiles and runs in different scenarios.

This PR implements a package.json script test:pkg-consumption which uses @pkerschbaum/pkg-consumption-test to run "package consumption scenarios".
Those scenarios are implemented in /test-pkg-consumption.

Four scenarios are implemented with this PR. Locally I added a fifth scenario for #162, and it successfully reproduces the issue.
In other words, when working on a fix for #162 one can just work against that failing scenario, while making sure that the others don't break.

Notes

  • A GitHub action is also added running the test, similar to the unit tests.

jest.config.js Outdated
@@ -4,4 +4,5 @@ module.exports = {
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
testEnvironment: 'node',
rootDir: './test',
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jest would execute the .spec files in the directory test-lib-consumption without that.

it(`scenario "${scenarioDirectory.name}"`, async () => {
const pathToDirectory = path.join(PATHS.SCENARIOS_DIRECTORY, scenarioDirectory.name);
$.cwd = pathToDirectory;
await $`npm install --package-lock=false`;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

npm install is used here (instead of yarn) because for the scenarios it does not matter - they just fetch dependencies from Verdaccio and that's it.

@alexreardon
Copy link
Owner

This looks like a fantastic change. I am so sorry for not getting back to you sooner! I have been walking through a bit of burnout. I hope to look at this thoroughly in the new year

@pkerschbaum
Copy link
Contributor Author

No problem!
Yes lets get back to it next year 👍

@alexreardon
Copy link
Owner

@pkerschbaum I love the goal and outcome of this change. Something I am thinking about is that this is a lot of code and complexity to add to this (little) package. I wonder if there is some way to pull what you have done out into another place (eg a package) which then tiny-invariant can use (reducing the complexity of this repo). What do you think?

@pkerschbaum
Copy link
Contributor Author

@alexreardon I was actually able to create a package @pkerschbaum/pkg-consumption-test which exposes a command to run the tests!
Now the changes in this repository tiny-invariant are only the "package consumption scenarios" (and the GitHub workflow) to run the tests :)

@pkerschbaum
Copy link
Contributor Author

I also updated the description of the PR.

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.

None yet

2 participants