[web3.js][experimental] Set up test/dev infra (#28950)
* Update `@solana/eslint-config-solana` * [web3.js][experimental] Add Watchman config to ignore `dist` and `node_modules` folders * [web3.js][experimental] Install Jest * [web3.js][experimental] Configure Jest to lint, format, and test code * [web3.js][experimental] Add a typecheck step * [web3.js][experimental] Add fake tests and fake implementation to exercise the build infra
This commit is contained in:
parent
2e99668111
commit
656b150e57
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"extends": ["@solana/eslint-config-solana"]
|
||||
"extends": ["@solana/eslint-config-solana", "@solana/eslint-config-solana/jest"]
|
||||
}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignore_dirs": ["dist", "node_modules"]
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
import type { Config } from 'jest';
|
||||
|
||||
export default {
|
||||
projects: [
|
||||
'<rootDir>/internal/jest/jest-lint.config.ts',
|
||||
'<rootDir>/internal/jest/jest-prettier.config.ts',
|
||||
'<rootDir>/internal/jest/jest-unit.config.browser.ts',
|
||||
'<rootDir>/internal/jest/jest-unit.config.node.ts',
|
||||
],
|
||||
rootDir: '../../',
|
||||
} as Config;
|
|
@ -0,0 +1,8 @@
|
|||
import type { Config } from 'jest';
|
||||
|
||||
export default {
|
||||
displayName: 'ESLint',
|
||||
rootDir: '../../',
|
||||
runner: 'eslint',
|
||||
testMatch: ['<rootDir>src/**/*.ts', '<rootDir>internal/**'],
|
||||
} as Config;
|
|
@ -0,0 +1,9 @@
|
|||
import type { Config } from 'jest';
|
||||
|
||||
export default {
|
||||
displayName: 'Prettier',
|
||||
moduleFileExtensions: ['js', 'ts', 'json', 'md'],
|
||||
rootDir: '../../',
|
||||
runner: 'prettier',
|
||||
testMatch: ['<rootDir>README.md', '<rootDir>internal/**', '<rootDir>src/**', '<rootDir>*'],
|
||||
} as Config;
|
|
@ -0,0 +1,15 @@
|
|||
import type { Config } from 'jest';
|
||||
import commonConfig from './jest-unit.config.common';
|
||||
|
||||
export default {
|
||||
...commonConfig,
|
||||
displayName: 'Unit Test (Browser)',
|
||||
globals: {
|
||||
...commonConfig.globals,
|
||||
__BROWSER__: true,
|
||||
__NODEJS__: false,
|
||||
__REACTNATIVE__: false,
|
||||
},
|
||||
testEnvironment: 'jsdom',
|
||||
testEnvironmentOptions: {},
|
||||
} as Config;
|
|
@ -0,0 +1,20 @@
|
|||
import type { Config } from 'jest';
|
||||
|
||||
export default {
|
||||
globals: {
|
||||
__DEV__: false,
|
||||
},
|
||||
rootDir: '../../',
|
||||
roots: ['<rootDir>src/'],
|
||||
setupFilesAfterEnv: ['<rootDir>internal/jest/setupFile.ts'],
|
||||
transform: {
|
||||
'^.+\\.(ts|js)$': [
|
||||
'@swc/jest',
|
||||
{
|
||||
jsc: {
|
||||
target: 'es2020',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
} as Config;
|
|
@ -0,0 +1,13 @@
|
|||
import { Config } from 'jest';
|
||||
import commonConfig from './jest-unit.config.common';
|
||||
|
||||
export default {
|
||||
...commonConfig,
|
||||
displayName: 'Unit Test (Node)',
|
||||
globals: {
|
||||
...commonConfig.globals,
|
||||
__BROWSER__: false,
|
||||
__NODEJS__: true,
|
||||
__REACTNATIVE__: false,
|
||||
},
|
||||
} as Config;
|
|
@ -36,14 +36,18 @@
|
|||
"web3"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "turbo run compile:js compile:typedefs lint verifyTreeShakability:browser verifyTreeShakability:native verifyTreeShakability:node",
|
||||
"build": "turbo run compile:js compile:typedefs test:lint test:prettier test:typecheck test:unit:browser test:unit:node test:treeshakability:browser test:treeshakability:native test:treeshakability:node",
|
||||
"compile:js": "tsup",
|
||||
"compile:typedefs": "tsc -p ./tsconfig.declarations.json",
|
||||
"dev": "pnpm run compile:js --watch",
|
||||
"lint": "eslint 'src/**'",
|
||||
"verifyTreeShakability:browser": "agadoo dist/index.browser.js",
|
||||
"verifyTreeShakability:native": "agadoo dist/index.node.js",
|
||||
"verifyTreeShakability:node": "agadoo dist/index.native.js"
|
||||
"dev": "jest -c ./internal/jest/jest-dev.config.ts --watch",
|
||||
"test:lint": "jest -c ./internal/jest/jest-lint.config.ts --silent",
|
||||
"test:prettier": "jest -c ./internal/jest/jest-prettier.config.ts --silent",
|
||||
"test:typecheck": "tsc --noEmit",
|
||||
"test:unit:browser": "jest -c ./internal/jest/jest-unit.config.browser.ts --silent",
|
||||
"test:unit:node": "jest -c ./internal/jest/jest-unit.config.node.ts --silent",
|
||||
"test:treeshakability:browser": "agadoo dist/index.browser.js",
|
||||
"test:treeshakability:native": "agadoo dist/index.node.js",
|
||||
"test:treeshakability:node": "agadoo dist/index.native.js"
|
||||
},
|
||||
"author": "Solana Maintainers <maintainers@solana.com>",
|
||||
"license": "MIT",
|
||||
|
@ -59,20 +63,28 @@
|
|||
"maintained node versions"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@solana/eslint-config-solana": "0.0.1",
|
||||
"@solana/eslint-config-solana": "^0.0.4",
|
||||
"@solana/prettier-config-solana": "0.0.1",
|
||||
"@swc/core": "^1",
|
||||
"@swc/core": "^1.3.18",
|
||||
"@swc/jest": "^0.2.23",
|
||||
"@types/jest": "^29.2.3",
|
||||
"@typescript-eslint/eslint-plugin": "^5.43.0",
|
||||
"@typescript-eslint/parser": "^5.43.0",
|
||||
"agadoo": "^2.0.0",
|
||||
"eslint": "^8.27.0",
|
||||
"eslint-plugin-jest": "^27.1.5",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"eslint-plugin-sort-keys-fix": "^1.1.2",
|
||||
"jest": "^29.3.1",
|
||||
"jest-environment-jsdom": "^29.3.1",
|
||||
"jest-runner-eslint": "^1.1.0",
|
||||
"jest-runner-prettier": "^1.0.0",
|
||||
"postcss": "^8.4.12",
|
||||
"prettier": "^2.7.1",
|
||||
"ts-node": "^10.9.1",
|
||||
"tsup": "6.5.0",
|
||||
"turbo": "^1.6.3",
|
||||
"typescript": "^4.1.0"
|
||||
"typescript": "~4.8"
|
||||
},
|
||||
"bundlewatch": {
|
||||
"defaultCompression": "gzip",
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,19 @@
|
|||
import rpc from '../rpc';
|
||||
|
||||
describe('rpc', () => {
|
||||
if (__BROWSER__) {
|
||||
it('logs stuff in the browser', () => {
|
||||
const spy = jest.spyOn(console, 'log');
|
||||
rpc();
|
||||
expect(spy).toHaveBeenCalledWith(`This is the browser fork of \`doThing()\``);
|
||||
});
|
||||
}
|
||||
if (__NODEJS__) {
|
||||
it('logs stuff in node', () => {
|
||||
const spy = jest.spyOn(console, 'log');
|
||||
rpc();
|
||||
expect(spy).toHaveBeenCalledWith(`This is the node fork of \`doThing()\``);
|
||||
});
|
||||
}
|
||||
it.todo('does something useful');
|
||||
});
|
|
@ -1,6 +1,6 @@
|
|||
import doThingBrowser from './doThing.browser.js';
|
||||
import doThingNative from './doThing.native.js';
|
||||
import doThingNode from './doThing.js';
|
||||
import doThingBrowser from './doThing.browser';
|
||||
import doThingNative from './doThing.native';
|
||||
import doThingNode from './doThing';
|
||||
|
||||
export default function rpc() {
|
||||
if (__DEV__) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"moduleResolution": "node",
|
||||
"target": "es2020"
|
||||
},
|
||||
"include": ["src"]
|
||||
"include": ["internal", "src"]
|
||||
}
|
||||
|
|
|
@ -1,29 +1,44 @@
|
|||
{
|
||||
"$schema": "https://turbo.build/schema.json",
|
||||
"pipeline": {
|
||||
"analyzeBundleSize": {
|
||||
"dependsOn": ["compile:js"],
|
||||
"outputs": []
|
||||
},
|
||||
"compile:js": {
|
||||
"inputs": ["./src/**"],
|
||||
"outputs": ["dist/**"]
|
||||
},
|
||||
"compile:typedefs": {
|
||||
"dependsOn": ["compile:js"],
|
||||
"inputs": ["./src/**"],
|
||||
"outputs": ["dist/**"]
|
||||
},
|
||||
"lint": {
|
||||
"test:lint": {
|
||||
"inputs": ["./internal/**", "./src/**"],
|
||||
"outputs": []
|
||||
},
|
||||
"verifyTreeShakability:browser": {
|
||||
"test:prettier": {
|
||||
"inputs": ["./internal/**", "./src/**"],
|
||||
"outputs": []
|
||||
},
|
||||
"test:typecheck": {
|
||||
"inputs": ["./internal/**", "./src/**"],
|
||||
"outputs": []
|
||||
},
|
||||
"test:unit:browser": {
|
||||
"inputs": ["./src/**"],
|
||||
"outputs": []
|
||||
},
|
||||
"test:unit:node": {
|
||||
"inputs": ["./src/**"],
|
||||
"outputs": []
|
||||
},
|
||||
"test:treeshakability:browser": {
|
||||
"dependsOn": ["compile:js"],
|
||||
"outputs": []
|
||||
},
|
||||
"verifyTreeShakability:native": {
|
||||
"test:treeshakability:native": {
|
||||
"dependsOn": ["compile:js"],
|
||||
"outputs": []
|
||||
},
|
||||
"verifyTreeShakability:node": {
|
||||
"test:treeshakability:node": {
|
||||
"dependsOn": ["compile:js"],
|
||||
"outputs": []
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue