Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,13 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install pnpm (for the pnpm example project)
shell: bash
run: |
case "$(node -p 'process.versions.node.split(".")[0]')" in
16) npm install --global pnpm@8 ;;
18) npm install --global pnpm@9 ;;
*) npm install --global pnpm ;;
esac
- run: npm ci
- run: npm test
4 changes: 2 additions & 2 deletions examples/babel/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions examples/jest-broken/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions examples/jest/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions examples/node-ava/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions examples/node-esm-auto-loader/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions examples/node-esm-pnpm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules/
pnpm-lock.yaml
1 change: 1 addition & 0 deletions examples/node-esm-pnpm/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hoist=false
7 changes: 7 additions & 0 deletions examples/node-esm-pnpm/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "testdouble-node-esm-pnpm-example",
"private": true,
"scripts": {
"test": "pnpm --recursive test"
}
}
8 changes: 8 additions & 0 deletions examples/node-esm-pnpm/packages/app/lib/numbers-only.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import isNumber from 'is-number'

export default function (thing) {
if (!isNumber(thing)) {
throw new Error('numbers only!')
}
return true
}
11 changes: 11 additions & 0 deletions examples/node-esm-pnpm/packages/app/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"name": "testdouble-node-esm-pnpm-example-app",
"private": true,
"scripts": {
"test": "node --loader=testdouble --test ./test/numbers-only-test.mjs"
},
"devDependencies": {
"is-number": "^7.0.0",
"testdouble": "file:../../../.."
}
}
20 changes: 20 additions & 0 deletions examples/node-esm-pnpm/packages/app/test/numbers-only-test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import assert from 'node:assert/strict'
import { describe, it, afterEach } from 'node:test'
import * as td from 'testdouble'

// is-number is a dependency of this package only, so pnpm installs it where
// this file can see it but testdouble (in the workspace root's node_modules)
// can't. td.replaceEsm() has to resolve it the way this file would.
describe('numbers-only', function () {
afterEach(function () {
td.reset()
})

it('replaces a third-party module only this package depends on', async function () {
const isNumber = (await td.replaceEsm('is-number')).default
const numbersOnly = (await import('../lib/numbers-only.mjs')).default
td.when(isNumber('seven')).thenReturn(true)

assert.strictEqual(numbersOnly('seven'), true)
})
})
11 changes: 11 additions & 0 deletions examples/node-esm-pnpm/pnpm-workspace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
packages:
- packages/*

# Keep each package's dependencies out of reach of the packages installed in
# the workspace root, so td.replaceEsm() has to resolve bare specifiers from
# the test file (pnpm 10+ reads this here, pnpm 8 and 9 from .npmrc)
hoist: false

# Install testdouble's dependencies even when they were just released,
# instead of pnpm adding exclusions to this file for them
minimumReleaseAge: 0
2 changes: 1 addition & 1 deletion examples/node-esm/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions examples/node/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"test:esm-auto-loader": "node test/support/supports-auto-load.js not || cross-env TS_NODE_IGNORE=\"node_modules,notypescript\" ./test/safe-esm/teenytest-proxy.js --helper test/helper.js test/safe-esm/replace.test.js",
"test:no-loader-esm": "node test/support/supports-auto-load.js || cross-env TS_NODE_IGNORE=\"node_modules,notypescript\" teenytest test/helper.js './test/safe-esm/*.no-loader-test.{mjs,js}'",
"test:ci": "npm run compile && run-p style test && echo \"All done!\"",
"test:example": "run-s test:example:babel test:example:jest test:example:jest-broken test:example:node test:example:node-ava test:example:node-esm test:example-esm-auto-loader",
"test:example": "run-s test:example:babel test:example:jest test:example:jest-broken test:example:node test:example:node-ava test:example:node-esm test:example:node-esm-pnpm test:example-esm-auto-loader",
"test:example-esm-auto-loader": "node test/support/supports-auto-load.js not || npm run test:example:node-esm-auto-loader",
"test:example:babel": "bash ./script/run-examples babel",
"test:example:jest": "bash ./script/run-examples jest",
Expand All @@ -55,6 +55,7 @@
"test:example:node": "bash ./script/run-examples node",
"test:example:node-ava": "bash ./script/run-examples node-ava",
"test:example:node-esm": "bash ./script/run-examples node-esm",
"test:example:node-esm-pnpm": "bash ./script/run-examples node-esm-pnpm",
"test:example:node-esm-auto-loader": "bash ./script/run-examples node-esm-auto-loader",
"test:example:webpack": "bash ./script/run-examples webpack",
"version:write": "echo \"export default '$npm_package_version'\" > src/version.js",
Expand Down Expand Up @@ -96,7 +97,7 @@
},
"dependencies": {
"lodash": "^4.17.21",
"quibble": "^0.11.0",
"quibble": "^0.12.1",
"stringify-object-es5": "^2.5.0",
"theredoc": "^1.0.0"
},
Expand Down
11 changes: 10 additions & 1 deletion script/run-examples
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,16 @@ cd examples
for D in $projects; do
echo "<------ Running tests for example project '${D}'"
cd "${D}"
npm install
if [ -f pnpm-workspace.yaml ]; then
if ! command -v pnpm > /dev/null; then
echo "pnpm is required to run the example project '${D}' (npm install --global pnpm)"
exit 1
fi
# Its lockfile isn't committed, which pnpm refuses by default on CI
pnpm install --no-frozen-lockfile
else
npm install
fi
npm test
cd ..
done
Loading