Please see PostHog Docs. Specifically, browser JS library details.
Unit tests: run yarn test.
Cypress: run yarn serve to have a test server running and separately yarn cypress to launch Cypress test engine.
Testing on IE11 requires a bit more setup.
- Run
posthoglocally on port 8000 (DEBUG=1 TEST=1 ./bin/start). - Run
python manage.py setup_dev --no-dataon posthog repo, which sets up a demo account. - Optional: rebuild array.js on changes:
nodemon -w src/ --exec bash -c "yarn build-rollup". - Export browserstack credentials:
export BROWSERSTACK_USERNAME=xxx BROWSERSTACK_ACCESS_KEY=xxx. - Run tests:
npx testcafe "browserstack:ie" testcafe/e2e.spec.js.
You can use the create react app setup in playground/nextjs to test posthog-js as an npm module in a Nextjs application.
- Run
posthoglocally on port 8000 (DEBUG=1 TEST=1 ./bin/start). - Run
python manage.py setup_dev --no-dataon posthog repo, which sets up a demo account. - Copy posthog token found in
http://localhost:8000/project/settingsand then cd playground/nextjsand runNEXT_PUBLIC_POSTHOG_KEY='<your-local-api-key>' yarn dev
- Unit tests - this verifies the behavior of the library in bite-sized chunks. Keep this coverage close to 100%, test corner cases and internal behavior here
- Cypress tests - integrates with a real chrome browser and is capable of testing timing, browser requests, etc. Useful for testing high-level library behavior, ordering and verifying requests. We shouldn't aim for 100% coverage here as it's impossible to test all possible combinations.
- TestCafe E2E tests - integrates with a real posthog instance sends data to it. Hardest to write and maintain - keep these very high level
The posthog-js snippet for a website loads static js from the main PostHog/posthog repo. Which means, when testing the snippet with a website, there's a bit of extra setup required:
- Run
PostHog/posthoglocally - Link the
posthog-jsdependency to your local version (see below) - Run
yarn serveinposthog-js. (This ensuresdist/array.jsis being generated) - In your locally running
PostHog/posthogbuild, runyarn copy-scripts. (This copies the scripts generated in step 3 to the static assets folder forPostHog/posthog)
Further, it's a good idea to modify start-http script to add development mode: webpack serve --mode development, which doesn't minify the resulting js (which you can then read in your browser).
Run npm install -g yalc
- In the posthog-js repo
- Run
yalc publish
- Run
- In the posthog repo
- Run
yalc add posthog-js && pnpm i && pnpm-copy-scripts
- Run
- In the posthog-js repo
- Run
yalc publish
- Run
- In the posthog repo
- Run
yalc update && pnpm i && pnpm copy-scripts
- Run
- In the posthog repo
- run
yalc remove posthog-js - run
yarn install
- run
Just bump up version in package.json on the main branch and the new version will be published automatically,
with a matching PR in the main PostHog repo created.
It's advised to use bump patch/minor/major label on PRs - that way the above will be done automatically
when the PR is merged.
Courtesy of GitHub Actions.
To release a new version, make sure you're logged into npm (npm login).
We tend to follow the following steps:
- Merge your changes into master.
- Release changes as a beta version:
npm version 1.x.x-beta.0npm publish --tag betagit push --tags
- Create a PR linking to this version in the main PostHog repo.
- Once deployed and tested, write up CHANGELOG.md, and commit.
- Release a new version:
npm version 1.x.xnpm publishgit push --tags
- Create a PR linking to this version in the main PostHog repo.