Last active
October 17, 2022 14:44
-
-
Save SmashingQuasar/594746f81679803fe19f4145a5e57f3b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| set -euo pipefail | |
| FILE_PATH="$(realpath $BASH_SOURCE)" | |
| CURRENT_DIR="$(dirname $FILE_PATH)" | |
| cd $CURRENT_DIR; | |
| echo "Removing Jest and it's dependencies" | |
| JEST_PACKAGES=("jest" "jest-junit" "@swc-jest" "ts-jest" "@types/jest" "eslint-plugin-jest" "eslint-plugin-jest-formatting") | |
| for package_name in ${JEST_PACKAGES[@]}; | |
| do | |
| echo "Looking for $package_name in installed dependencies" | |
| if yarn list --pattern $package_name --depth 0 | grep -q " $package_name@"; then | |
| echo "Found package $package_name, removing" | |
| yarn remove --silent $package_name | |
| echo "Removed package $package_name" | |
| fi | |
| done | |
| echo "Installing Mocha, Chai, Sinon, chai-as-promised c8 and SWC" | |
| yarn add -D \ | |
| mocha \ | |
| chai \ | |
| sinon \ | |
| chai-as-promised \ | |
| c8 \ | |
| @types/mocha \ | |
| @types/chai \ | |
| @types/sinon \ | |
| @types/chai-as-promised \ | |
| @swc/core \ | |
| ts-node | |
| echo "Removing Jest configuration files" | |
| rm -f jest.config.js | |
| rm -f jest.config.cjs | |
| rm -f jest.config.json | |
| echo "Creating .mocharc.json file" | |
| cat > .mocharc.json << EOF | |
| { | |
| "extension": ["ts"], | |
| "node-option": ["experimental-specifier-resolution=node", "loader=ts-node/esm"], | |
| "spec": ["__tests__/**/*.spec.ts"], | |
| "timeout": 5000, | |
| "parallel": true, | |
| "checkLeaks": true, | |
| "diff": true, | |
| "forbidPending": true | |
| } | |
| EOF | |
| echo "Creating tsconfig.mocha.json" | |
| cat > tsconfig.mocha.json << EOF | |
| { | |
| "extends": "./tsconfig.json", | |
| "include": [".", "./**/.*", "./**/*.json"], | |
| "ts-node": { | |
| "files": true, | |
| "swc": true | |
| } | |
| } | |
| EOF | |
| echo "Creating .c8rc.json" | |
| cat > .c8rc.json << EOF | |
| { | |
| "exclude": [], | |
| "reporter": ["html"], | |
| "report-dir": "./coverage", | |
| "skip-full": false, | |
| "check-coverage": true, | |
| "statements": 80, | |
| "branches": 80, | |
| "functions": 80, | |
| "lines": 80 | |
| } | |
| EOF | |
| echo "Converting all .spec.ts files to Mocha syntax" | |
| FILES=$(find "./__tests__" -name "*.spec.ts") | |
| for path in $FILES | |
| do | |
| echo "Editing $path" | |
| echo 'Adding necessary imports and eslint ignore to file' | |
| echo -e "/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { expect as chaiExpect, use as chaiUse } from 'chai';\nimport { default as chaiAsPromised } from 'chai-as-promised';\n\n$(cat $path)" > "$path" | |
| echo -e "$(cat $path)\n/* eslint-enable @typescript-eslint/no-unused-expressions */" > "$path" | |
| if [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
| echo 'Registering chaiAsPromised' | |
| sed -r -i "0,/describe/s//chaiUse(chaiAsPromised);\n\ndescribe/" "$path" | |
| echo 'Removing expect.assertions() expressions' | |
| sed -r -i -e "s/expect\.assertions\([0-9]*\);//" "$path" | |
| echo 'Converting expect statements to chaiExpect' | |
| sed -r -i -e "s/expect\(/chaiExpect(/" "$path" | |
| echo 'Converting toBeInstanceOf statements' | |
| sed -r -i -e "s/\.toBeInstanceOf/.to.be.instanceof/" "$path" | |
| echo 'Converting toStrictEqual statements' | |
| sed -r -i -e "s/\.toStrictEqual/.to.deep.equal/" "$path" | |
| echo 'Converting toBeUndefined statements' | |
| sed -r -i -e "s/\.toBeUndefined\(\)/.to.be.undefined/" "$path" | |
| echo 'Converting toBeDefined statements' | |
| sed -r -i -e "s/\.toBeDefined\(\)/.not.to.be.undefined/" "$path" | |
| echo 'Converting toBe statements' | |
| sed -r -i -e "s/\.toBe/.to.equal/" "$path" | |
| echo 'Converting toMatch statements' | |
| sed -r -i -e "s/\.toMatch/.to.match/" "$path" | |
| echo 'Converting toHaveLength statements' | |
| sed -r -i -e "s/\.toHaveLength/.to.have.lengthOf/" "$path" | |
| echo 'Converting rejects.toThrow statements' | |
| sed -r -i -e "s/\.rejects\.toThrow\([^)]*\)/.to.eventually.be.rejected/" "$path" | |
| echo 'Converting resolves.not.toThrow statements' | |
| sed -r -i -e "s/\.resolves\.not\.toThrow\([^)]*\)/.to.eventually.not.be.rejected/" "$path" | |
| echo 'Converting toThrow statements' | |
| sed -r -i -e "s/\.toThrow\(([^)]*)\)/.to.throw(\1)/" "$path" | |
| echo 'Converting resolves.to statements' | |
| sed -r -i -e "s/\.resolves\.to/.to.eventually/" "$path" | |
| echo 'Converting rejects.to statements' | |
| sed -r -i -e "s/\.rejects\.to/.to.eventually/" "$path" | |
| elif [[ "$OSTYPE" == "darwin"* ]]; then | |
| echo 'Registering chaiAsPromised' | |
| sed -r -i '' "0,/describe/s//chaiUse(chaiAsPromised);\n\ndescribe/" "$path" | |
| echo 'Removing expect.assertions() expressions' | |
| sed -r -i '' "s/expect\.assertions\([0-9]*\);//" "$path" | |
| echo 'Converting expect statements to chaiExpect' | |
| sed -r -i '' "s/expect\(/chaiExpect(/" "$path" | |
| echo 'Converting toBeInstanceOf statements' | |
| sed -r -i '' "s/\.toBeInstanceOf/.to.be.instanceof/" "$path" | |
| echo 'Converting toStrictEqual statements' | |
| sed -r -i '' "s/\.toStrictEqual/.to.deep.equal/" "$path" | |
| echo 'Converting toBeUndefined statements' | |
| sed -r -i '' "s/\.toBeUndefined\(\)/.to.be.undefined/" "$path" | |
| echo 'Converting toBeDefined statements' | |
| sed -r -i '' "s/\.toBeDefined\(\)/.not.to.be.undefined/" "$path" | |
| echo 'Converting toBe statements' | |
| sed -r -i '' "s/\.toBe/.to.equal/" "$path" | |
| echo 'Converting toMatch statements' | |
| sed -r -i '' "s/\.toMatch/.to.match/" "$path" | |
| echo 'Converting toHaveLength statements' | |
| sed -r -i '' "s/\.toHaveLength/.to.have.lengthOf/" "$path" | |
| echo 'Converting rejects.toThrow statements' | |
| sed -r -i '' "s/\.rejects\.toThrow\([^)]*\)/.to.eventually.be.rejected/" "$path" | |
| echo 'Converting resolves.not.toThrow statements' | |
| sed -r -i '' "s/\.resolves\.not\.toThrow\([^)]*\)/.to.eventually.not.be.rejected/" "$path" | |
| echo 'Converting toThrow statements' | |
| sed -r -i '' "s/\.toThrow\(([^)]*)\)/.to.throw(\1)/" "$path" | |
| echo 'Converting resolves.to statements' | |
| sed -r -i '' "s/\.resolves\.to/.to.eventually/" "$path" | |
| echo 'Converting rejects.to statements' | |
| sed -r -i '' "s/\.rejects\.to/.to.eventually/" "$path" | |
| fi | |
| done | |
| echo "Done converting files to Mocha syntax" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment