Skip to content

Commit ed4eda1

Browse files
authored
[core-util] Migrate from mocha & karma to vitest (#27551)
### Packages impacted by this PR `@azure/core-util` ### Describe the problem that is addressed by this PR An experiment to migrate away from mocha and karma to vitest. This eliminates the need for a browser bundle as vitest uses the test source files directly. I have also created a small plugin to avoid needing to add additional browser mappings for testing
1 parent c0d51b6 commit ed4eda1

24 files changed

+1293
-454
lines changed

common/config/rush/pnpm-lock.yaml

Lines changed: 1081 additions & 375 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
{
2+
"name": "@azure-tools/vite-plugin-browser-test-map",
3+
"version": "1.0.0",
4+
"description": "A vite plugin for dynamically remapping browser replacement maps for tests",
5+
"sdk-type": "utility",
6+
"type": "module",
7+
"private": true,
8+
"keywords": [
9+
"vite-plugin"
10+
],
11+
"author": "Microsoft Corporation",
12+
"license": "MIT",
13+
"homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/common/tools/vite-plugin-browser-test-map/",
14+
"repository": {
15+
"type": "git",
16+
"url": "https://github.com/Azure/azure-sdk-for-js.git",
17+
"directory": "common/tools/vite-plugin-browser-test-map"
18+
},
19+
"bugs": {
20+
"url": "https://github.com/Azure/azure-sdk-for-js/issues"
21+
},
22+
"main": "dist/index.js",
23+
"files": [
24+
"dist/"
25+
],
26+
"scripts": {
27+
"build": "tsc -p .",
28+
"build:samples": "echo Skipped.",
29+
"build:test": "tsc -p .",
30+
"clean": "rimraf dist/",
31+
"format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"./**/*.{ts,json,md}\"",
32+
"check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"./**/*.{ts,json,md}\"",
33+
"lint": "eslint src --ext .ts",
34+
"pack": "npm pack 2>&1",
35+
"prebuild": "npm run clean",
36+
"integration-test:browser": "echo skipped",
37+
"integration-test:node": "echo skipped",
38+
"integration-test": "npm run integration-test:node && npm run integration-test:browser",
39+
"unit-test:node": "echo skipped",
40+
"unit-test:browser": "echo skipped",
41+
"unit-test": "npm run unit-test:node && npm run unit-test:browser",
42+
"test": "npm run clean && npm run build:test && npm run unit-test"
43+
},
44+
"engines": {
45+
"node": ">=18.0.0"
46+
},
47+
"dependencies": {
48+
"tslib": "^2.2.0"
49+
},
50+
"devDependencies": {
51+
"@types/node": "^18.0.0",
52+
"eslint": "^8.50.0",
53+
"prettier": "^2.5.1",
54+
"rimraf": "^3.0.0",
55+
"typescript": "~5.2.0"
56+
}
57+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT license.
3+
4+
function hasPackageCache<T extends {}>(
5+
obj: T
6+
): obj is T & { packageCache: Map<string, { data: any }> } {
7+
return "packageCache" in obj;
8+
}
9+
10+
function rewriteDistPath(path: string): string {
11+
return path.replace(/^\.\/dist-esm\/(\S+)\.js$/, function replacer(_match, path) {
12+
return `./src/${path}`;
13+
});
14+
}
15+
16+
export default function browserTestMap() {
17+
return {
18+
name: "browser-test-config",
19+
enforce: "pre",
20+
configResolved: (config: {}) => {
21+
if (hasPackageCache(config)) {
22+
for (const { data } of config.packageCache.values()) {
23+
if (data.browser) {
24+
for (const [key, value] of Object.entries<string>(data.browser)) {
25+
data.browser[rewriteDistPath(key)] = rewriteDistPath(value);
26+
}
27+
}
28+
}
29+
}
30+
},
31+
};
32+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"extends": "../../../tsconfig",
3+
"compilerOptions": {
4+
"target": "es2022",
5+
"module": "Node16",
6+
"moduleResolution": "Node16",
7+
"outDir": "./dist",
8+
"declarationDir": "./types"
9+
},
10+
"include": ["src/**/*.ts"]
11+
}

rush.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* This is the main configuration file for Rush.
33
* For full documentation, please see https://rushjs.io
4-
*/{
4+
*/ {
55
"$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json",
66
/**
77
* (Required) This specifies the version of the Rush engine to be used in this repo.
@@ -623,9 +623,7 @@
623623
{
624624
"packageName": "@azure/identity",
625625
"projectFolder": "sdk/identity/identity",
626-
"decoupledLocalDependencies": [
627-
"@azure/keyvault-keys"
628-
],
626+
"decoupledLocalDependencies": ["@azure/keyvault-keys"],
629627
"versionPolicyName": "client"
630628
},
631629
{
@@ -823,6 +821,11 @@
823821
"projectFolder": "common/tools/eslint-plugin-azure-sdk-helper",
824822
"versionPolicyName": "utility"
825823
},
824+
{
825+
"packageName": "@azure-tools/vite-plugin-browser-test-map",
826+
"projectFolder": "common/tools/vite-plugin-browser-test-map",
827+
"versionPolicyName": "utility"
828+
},
826829
{
827830
"packageName": "@azure-tools/test-recorder",
828831
"projectFolder": "sdk/test-utils/recorder",

sdk/core/core-util/.eslintrc.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"plugins": ["@azure/azure-sdk"],
3+
"extends": ["plugin:@azure/azure-sdk/azure-sdk-base"],
4+
"rules": {
5+
"@azure/azure-sdk/ts-package-json-module": "off"
6+
}
7+
}

sdk/core/core-util/api-extractor.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3-
"mainEntryPointFilePath": "types/latest/src/index.d.ts",
3+
"mainEntryPointFilePath": "types/latest/index.d.ts",
44
"docModel": {
55
"enabled": true
66
},

sdk/core/core-util/package.json

Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44
"description": "Core library for shared utility methods",
55
"sdk-type": "client",
66
"main": "dist/index.js",
7-
"module": "dist-esm/src/index.js",
7+
"module": "dist-esm/index.js",
88
"browser": {
9-
"./dist-esm/src/sha256.js": "./dist-esm/src/sha256.browser.js",
10-
"./dist-esm/src/uuidUtils.js": "./dist-esm/src/uuidUtils.browser.js",
11-
"./dist-esm/src/bytesEncoding.js": "./dist-esm/src/bytesEncoding.browser.js"
9+
"./dist-esm/sha256.js": "./dist-esm/sha256.browser.js",
10+
"./dist-esm/uuidUtils.js": "./dist-esm/uuidUtils.browser.js",
11+
"./dist-esm/bytesEncoding.js": "./dist-esm/bytesEncoding.browser.js"
1212
},
1313
"react-native": {
14-
"./dist/index.js": "./dist-esm/src/index.js",
15-
"./dist-esm/src/uuidUtils.js": "./dist-esm/src/uuidUtils.native.js"
14+
"./dist/index.js": "./dist-esm/index.js",
15+
"./dist-esm/uuidUtils.js": "./dist-esm/uuidUtils.native.js"
1616
},
1717
"types": "types/latest/core-util.d.ts",
1818
"scripts": {
1919
"build:samples": "echo Obsolete",
20-
"build:test": "tsc -p . && dev-tool run bundle",
21-
"build": "npm run clean && tsc -p . && dev-tool run bundle && api-extractor run --local",
20+
"build:test": "npx playwright install",
21+
"build": "npm run clean && tsc -p . && dev-tool run bundle --browser-test false && api-extractor run --local",
2222
"check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"",
2323
"clean": "rimraf dist dist-* temp types *.tgz *.log",
2424
"execute:samples": "echo skipped",
@@ -27,19 +27,19 @@
2727
"integration-test:browser": "echo skipped",
2828
"integration-test:node": "echo skipped",
2929
"integration-test": "npm run integration-test:node && npm run integration-test:browser",
30-
"lint:fix": "eslint package.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]",
31-
"lint": "eslint package.json api-extractor.json src test --ext .ts",
30+
"lint:fix": "eslint package.json api-extractor.json src --ext .ts --fix --fix-type [problem,suggestion]",
31+
"lint": "eslint package.json api-extractor.json src --ext .ts",
3232
"pack": "npm pack 2>&1",
33-
"test:browser": "npm run clean && npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
34-
"test:node": "npm run clean && tsc -p . && npm run unit-test:node && npm run integration-test:node",
35-
"test": "npm run clean && tsc -p . && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test",
36-
"unit-test:browser": "karma start --single-run",
37-
"unit-test:node": "dev-tool run test:node-ts-input --no-test-proxy=true",
33+
"test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
34+
"test:node": "npm run unit-test:node && npm run integration-test:node",
35+
"test": "npm run test:node && npm run test:browser",
36+
"unit-test:browser": "vitest -c vitest.browser.config.mts",
37+
"unit-test:node": "vitest",
3838
"unit-test": "npm run unit-test:node && npm run unit-test:browser"
3939
},
4040
"files": [
4141
"dist/",
42-
"dist-esm/src/",
42+
"dist-esm/",
4343
"types/latest/core-util.d.ts",
4444
"README.md",
4545
"LICENSE"
@@ -66,34 +66,20 @@
6666
},
6767
"devDependencies": {
6868
"@azure/dev-tool": "^1.0.0",
69+
"@azure/eslint-plugin-azure-sdk": "^3.0.0",
70+
"@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
6971
"@microsoft/api-extractor": "^7.31.1",
70-
"@types/chai": "^4.1.6",
71-
"@types/chai-as-promised": "^7.1.4",
72-
"@types/mocha": "^10.0.0",
7372
"@types/node": "^18.0.0",
74-
"@types/sinon": "^17.0.0",
75-
"@azure/eslint-plugin-azure-sdk": "^3.0.0",
76-
"chai": "^4.2.0",
77-
"chai-as-promised": "^7.1.1",
73+
"@vitest/browser": "^1.1.0",
74+
"downlevel-dts": "^0.10.0",
7875
"cross-env": "^7.0.2",
7976
"eslint": "^8.0.0",
8077
"inherits": "^2.0.3",
81-
"karma": "^6.2.0",
82-
"karma-chrome-launcher": "^3.0.0",
83-
"karma-coverage": "^2.0.0",
84-
"karma-env-preprocessor": "^0.1.1",
85-
"karma-firefox-launcher": "^1.1.0",
86-
"karma-junit-reporter": "^2.0.1",
87-
"karma-mocha": "^2.0.1",
88-
"karma-mocha-reporter": "^2.2.5",
89-
"karma-sourcemap-loader": "^0.3.8",
90-
"mocha": "^10.0.0",
9178
"prettier": "^2.5.1",
79+
"playwright": "^1.39.0",
9280
"rimraf": "^3.0.0",
93-
"sinon": "^17.0.0",
9481
"typescript": "~5.2.0",
95-
"util": "^0.12.1",
96-
"ts-node": "^10.0.0"
82+
"vitest": "^1.1.0"
9783
},
9884
"//metadata": {
9985
"migrationDate": "2023-03-08T18:36:03.000Z"

sdk/core/core-util/review/core-util.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
```ts
66

7-
import { AbortSignalLike } from '@azure/abort-controller';
7+
import type { AbortSignalLike } from '@azure/abort-controller';
88

99
// @public
1010
export type AbortablePromiseBuilder<T> = (abortOptions: {

sdk/core/core-util/src/aborterUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT license.
33

4-
import { AbortSignalLike } from "@azure/abort-controller";
4+
import type { AbortSignalLike } from "@azure/abort-controller";
55

66
/**
77
* Options related to abort controller.

0 commit comments

Comments
 (0)