Skip to content

Instantly share code, notes, and snippets.

@SmashingQuasar
Last active October 17, 2022 14:44
Show Gist options
  • Select an option

  • Save SmashingQuasar/594746f81679803fe19f4145a5e57f3b to your computer and use it in GitHub Desktop.

Select an option

Save SmashingQuasar/594746f81679803fe19f4145a5e57f3b to your computer and use it in GitHub Desktop.
#!/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