diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2215f5eee..48e0923cd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -113,6 +113,10 @@ jobs: node-version: ${{ matrix.node-version }} cache: npm + - name: Set NodeJS scripts shell + if: startsWith(matrix.os, 'windows') + run: npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" + - name: Install dependencies run: | npm ci @@ -271,6 +275,14 @@ jobs: node-version: ${{ env.STABLE_NODE_VERSION }} cache: npm + # Temporary fix for lodash issue. This step should be removed eventually + # once a better solution is found. + - name: Install dependencies + run: npm ci + + - name: Install plugins + run: npm run install-plugins + - name: Download dist folder uses: actions/download-artifact@v4 with: diff --git a/.nycrc b/.nycrc index 363b75318..150d01d17 100644 --- a/.nycrc +++ b/.nycrc @@ -5,7 +5,6 @@ "instrument": true, "lines": 50, "reporter": ["text-summary", "html", "lcov"], - "require": ["tsx"], "sourceMap": true, "statements": 50 } diff --git a/examples/graphql/src/consumer.spec.ts b/examples/graphql/src/consumer.spec.ts index 1680031da..9a7cc9731 100644 --- a/examples/graphql/src/consumer.spec.ts +++ b/examples/graphql/src/consumer.spec.ts @@ -1,5 +1,5 @@ /* tslint:disable:no-unused-expression object-literal-sort-keys max-classes-per-file no-empty */ -import chai from 'chai'; +import * as chai from 'chai'; import * as path from 'path'; import chaiAsPromised from 'chai-as-promised'; import { query } from './consumer'; diff --git a/examples/typescript/test/get-dog.spec.ts b/examples/typescript/test/get-dog.spec.ts index dc4f69ca9..2933cc8a4 100644 --- a/examples/typescript/test/get-dog.spec.ts +++ b/examples/typescript/test/get-dog.spec.ts @@ -1,5 +1,5 @@ /* tslint:disable:no-unused-expression object-literal-sort-keys max-classes-per-file no-empty */ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import path = require('path'); import sinonChai from 'sinon-chai'; diff --git a/examples/v3/typescript/test/user.spec.ts b/examples/v3/typescript/test/user.spec.ts index 17c44e521..197ccd8e9 100644 --- a/examples/v3/typescript/test/user.spec.ts +++ b/examples/v3/typescript/test/user.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import sinonChai from 'sinon-chai'; import { PactV3, MatchersV3, LogLevel } from '@pact-foundation/pact'; diff --git a/examples/v4/matchers/consumer.spec.ts b/examples/v4/matchers/consumer.spec.ts index 3336dbd75..2492ff18d 100644 --- a/examples/v4/matchers/consumer.spec.ts +++ b/examples/v4/matchers/consumer.spec.ts @@ -1,5 +1,5 @@ /* tslint:disable:no-unused-expression no-empty */ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import { SpecificationVersion, diff --git a/examples/v4/plugins/test/matt.consumer.spec.ts b/examples/v4/plugins/test/matt.consumer.spec.ts index c1e61fa27..1b43fd180 100644 --- a/examples/v4/plugins/test/matt.consumer.spec.ts +++ b/examples/v4/plugins/test/matt.consumer.spec.ts @@ -1,5 +1,5 @@ /* tslint:disable:no-unused-expression no-empty */ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import { SpecificationVersion, PactV4, LogLevel } from '@pact-foundation/pact'; import net = require('net'); diff --git a/package-lock.json b/package-lock.json index 2efcfa0b7..02cd2a64a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,8 +27,8 @@ "@babel/core": "7.26.0", "@babel/preset-env": "7.26.0", "@pact-foundation/pact-js-prettier-config": "1.0.0", - "@types/chai": "4.3.20", - "@types/chai-as-promised": "8.0.1", + "@types/chai": "^5.0.1", + "@types/chai-as-promised": "^8.0.1", "@types/express": "^4.17.11", "@types/http-proxy": "1.17.15", "@types/lodash": "4.17.13", @@ -40,8 +40,8 @@ "@types/sinon-chai": "2.7.42", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", - "chai": "4.5.0", - "chai-as-promised": "8.0.1", + "chai": "^5.1.2", + "chai-as-promised": "^8.0.1", "commit-and-tag-version": "12.5.0", "copyfiles": "2.4.1", "eslint": "8.57.1", @@ -56,12 +56,13 @@ "nock": "13.5.6", "nyc": "17.1.0", "prettier": "3.4.2", + "proxyquire": "^2.1.3", "rimraf": "6.0.1", "sinon": "19.0.2", - "sinon-chai": "3.7.0", + "sinon-chai": "^4.0.0", "source-map-support": "0.5.21", "tsx": "^4.19.2", - "typescript": "4.9.5" + "typescript": "^5.7.3" }, "engines": { "node": ">=16" @@ -2475,10 +2476,13 @@ } }, "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.0.1.tgz", + "integrity": "sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA==", + "dev": true, + "dependencies": { + "@types/deep-eql": "*" + } }, "node_modules/@types/chai-as-promised": { "version": "8.0.1", @@ -2498,6 +2502,12 @@ "@types/node": "*" } }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, "node_modules/@types/express": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", @@ -3186,12 +3196,12 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/asynckit": { @@ -3544,21 +3554,19 @@ ] }, "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chai-as-promised": { @@ -3573,24 +3581,6 @@ "chai": ">= 2.1.2 < 6" } }, - "node_modules/chai-as-promised/node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "engines": { - "node": ">= 16" - } - }, - "node_modules/chai/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3629,15 +3619,12 @@ } }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/check-types": { @@ -4366,13 +4353,10 @@ "dev": true }, "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { "node": ">=6" } @@ -5563,6 +5547,19 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", + "dev": true, + "dependencies": { + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -5870,15 +5867,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -6865,6 +6853,15 @@ "node": ">=8" } }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -7543,13 +7540,10 @@ } }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true }, "node_modules/lru-cache": { "version": "5.1.1", @@ -8148,6 +8142,12 @@ "node": ">=0.10.0" } }, + "node_modules/module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", + "dev": true + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -8880,12 +8880,12 @@ } }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/picocolors": { @@ -9172,6 +9172,17 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/proxyquire": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", + "dev": true, + "dependencies": { + "fill-keys": "^1.0.2", + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + } + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -10079,12 +10090,12 @@ } }, "node_modules/sinon-chai": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", - "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-4.0.0.tgz", + "integrity": "sha512-cWqO7O2I4XfJDWyWElAQ9D/dtdh5Mo0RHndsfiiYyjWnlPzBJdIvjCVURO4EjyYaC3BjV+ISNXCfTXPXTEIEWA==", "dev": true, "peerDependencies": { - "chai": "^4.0.0", + "chai": "^5.0.0", "sinon": ">=4.0.0" } }, @@ -10859,16 +10870,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uglify-js": { @@ -13003,10 +13014,13 @@ } }, "@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.0.1.tgz", + "integrity": "sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA==", + "dev": true, + "requires": { + "@types/deep-eql": "*" + } }, "@types/chai-as-promised": { "version": "8.0.1", @@ -13026,6 +13040,12 @@ "@types/node": "*" } }, + "@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, "@types/express": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", @@ -13528,9 +13548,9 @@ "dev": true }, "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true }, "asynckit": { @@ -13764,26 +13784,16 @@ "dev": true }, "chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "dependencies": { - "type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true - } + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" } }, "chai-as-promised": { @@ -13793,14 +13803,6 @@ "dev": true, "requires": { "check-error": "^2.0.0" - }, - "dependencies": { - "check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true - } } }, "chalk": { @@ -13828,13 +13830,10 @@ } }, "check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "requires": { - "get-func-name": "^2.0.2" - } + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true }, "check-types": { "version": "7.3.0", @@ -14387,13 +14386,10 @@ "dev": true }, "deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true }, "deep-is": { "version": "0.1.4", @@ -15278,6 +15274,16 @@ "flat-cache": "^3.0.4" } }, + "fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", + "dev": true, + "requires": { + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" + } + }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -15484,12 +15490,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true - }, "get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -16180,6 +16180,12 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -16675,13 +16681,10 @@ } }, "loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.1" - } + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true }, "lru-cache": { "version": "5.1.1", @@ -17115,6 +17118,12 @@ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, + "module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", + "dev": true + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -17677,9 +17686,9 @@ "dev": true }, "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true }, "picocolors": { @@ -17900,6 +17909,17 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "proxyquire": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", + "dev": true, + "requires": { + "fill-keys": "^1.0.2", + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + } + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -18604,9 +18624,9 @@ } }, "sinon-chai": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", - "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-4.0.0.tgz", + "integrity": "sha512-cWqO7O2I4XfJDWyWElAQ9D/dtdh5Mo0RHndsfiiYyjWnlPzBJdIvjCVURO4EjyYaC3BjV+ISNXCfTXPXTEIEWA==", "dev": true, "requires": {} }, @@ -19178,9 +19198,9 @@ } }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index d1499ce43..e26c70363 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "clean": "rimraf dist coverage .nyc_output logs pacts", "predist": "npm run clean", "dist": "tsc && copyfiles package.json ./dist", + "install-plugins": "./scripts/install-plugins", "lint": "eslint --config .eslintrc.json \"{src,test}/**/*.ts\"", "lint:fix": "npm run lint -- --fix", "format:base": "prettier \"{src,test,examples}/**/*.{ts,js}\"", @@ -17,7 +18,7 @@ "release": "commit-and-tag-version", "test": "mocha", "coverage": "nyc npm run test", - "pretest": "./scripts/install-plugins", + "pretest": "npm run install-plugins", "docker:alpine:build": "docker build --build-arg NODE_VERSION=${NODE_VERSION:-current} -f Dockerfile.alpine -t pact-js:alpine .", "docker:debian:build": "docker build --build-arg NODE_VERSION=${NODE_VERSION:-current} -f Dockerfile.debian -t pact-js:debian .", "docker:alpine:run": "docker run -e LOG_LEVEL=${LOG_LEVEL:-info} -e GIT_REF=${GIT_REF:-test} -e GITHUB_ACTIONS=${GITHUB_ACTIONS:-false} -e SKIP_EXAMPLES=${SKIP_EXAMPLES:-''} -e PACT_BROKER_BASE_URL -e PACT_BROKER_TOKEN -w /home -v $(pwd):/home --rm pact-js:alpine", @@ -118,8 +119,8 @@ "@babel/core": "7.26.0", "@babel/preset-env": "7.26.0", "@pact-foundation/pact-js-prettier-config": "1.0.0", - "@types/chai": "4.3.20", - "@types/chai-as-promised": "8.0.1", + "@types/chai": "^5.0.1", + "@types/chai-as-promised": "^8.0.1", "@types/express": "^4.17.11", "@types/http-proxy": "1.17.15", "@types/lodash": "4.17.13", @@ -131,8 +132,8 @@ "@types/sinon-chai": "2.7.42", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", - "chai": "4.5.0", - "chai-as-promised": "8.0.1", + "chai": "^5.1.2", + "chai-as-promised": "^8.0.1", "commit-and-tag-version": "12.5.0", "copyfiles": "2.4.1", "eslint": "8.57.1", @@ -147,11 +148,12 @@ "nock": "13.5.6", "nyc": "17.1.0", "prettier": "3.4.2", + "proxyquire": "^2.1.3", "rimraf": "6.0.1", "sinon": "19.0.2", - "sinon-chai": "3.7.0", + "sinon-chai": "^4.0.0", "source-map-support": "0.5.21", "tsx": "^4.19.2", - "typescript": "4.9.5" + "typescript": "^5.7.3" } } diff --git a/src/common/net.spec.ts b/src/common/net.spec.ts index f0c53853f..ad8e4fafd 100644 --- a/src/common/net.spec.ts +++ b/src/common/net.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import nodeNet from 'net'; import { isPortAvailable } from './net'; diff --git a/src/common/request.spec.ts b/src/common/request.spec.ts index 0cbf2858f..00b9f8353 100644 --- a/src/common/request.spec.ts +++ b/src/common/request.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import nock from 'nock'; import { HTTPMethods, Request } from './request'; diff --git a/src/dsl/apolloGraphql.spec.ts b/src/dsl/apolloGraphql.spec.ts index 3df717f09..770cc243c 100644 --- a/src/dsl/apolloGraphql.spec.ts +++ b/src/dsl/apolloGraphql.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import { ApolloGraphQLInteraction } from './apolloGraphql'; diff --git a/src/dsl/graphql.spec.ts b/src/dsl/graphql.spec.ts index df5fd5bd9..04c6f80eb 100644 --- a/src/dsl/graphql.spec.ts +++ b/src/dsl/graphql.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import { GraphQLInteraction } from './graphql'; import { isMatcher } from './matchers'; diff --git a/src/dsl/interaction.spec.ts b/src/dsl/interaction.spec.ts index 6a45a5b0a..d2da32f81 100644 --- a/src/dsl/interaction.spec.ts +++ b/src/dsl/interaction.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import { HTTPMethods } from '../common/request'; import { Interaction, InteractionState } from './interaction'; diff --git a/src/dsl/verifier/proxy/parseBody.spec.ts b/src/dsl/verifier/proxy/parseBody.spec.ts index 01c97c38d..ca02e16cb 100644 --- a/src/dsl/verifier/proxy/parseBody.spec.ts +++ b/src/dsl/verifier/proxy/parseBody.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import { parseBody } from './parseBody'; diff --git a/src/dsl/verifier/proxy/parseBody.ts b/src/dsl/verifier/proxy/parseBody.ts index 96a9d5418..abe813d90 100644 --- a/src/dsl/verifier/proxy/parseBody.ts +++ b/src/dsl/verifier/proxy/parseBody.ts @@ -12,7 +12,7 @@ export const parseBody = (req: ReqBodyExtended): Buffer => { } if (Buffer.isBuffer(req.body)) { - bodyData = req.body; + bodyData = Buffer.from(req.body); } else if (typeof req.body === 'object') { bodyData = Buffer.from(JSON.stringify(req.body)); } diff --git a/src/dsl/verifier/proxy/proxy.spec.ts b/src/dsl/verifier/proxy/proxy.spec.ts index 09a34c3a4..b15bc7a8b 100644 --- a/src/dsl/verifier/proxy/proxy.spec.ts +++ b/src/dsl/verifier/proxy/proxy.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import http from 'http'; diff --git a/src/dsl/verifier/proxy/proxyRequest.spec.ts b/src/dsl/verifier/proxy/proxyRequest.spec.ts index 9b771418a..7e97beb88 100644 --- a/src/dsl/verifier/proxy/proxyRequest.spec.ts +++ b/src/dsl/verifier/proxy/proxyRequest.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import { Readable } from 'stream'; import { ProxyOptions } from './types'; import { toServerOptions as toServerOptionsAct } from './proxyRequest'; diff --git a/src/dsl/verifier/proxy/stateHandler/setupStates.spec.ts b/src/dsl/verifier/proxy/stateHandler/setupStates.spec.ts index da66b9a21..d0c44eb7f 100644 --- a/src/dsl/verifier/proxy/stateHandler/setupStates.spec.ts +++ b/src/dsl/verifier/proxy/stateHandler/setupStates.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import sinon from 'sinon'; diff --git a/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.ts b/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.ts index 0c4befd04..0475e684d 100644 --- a/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.ts +++ b/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.ts @@ -1,18 +1,21 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; -import sinon, { SinonSpy } from 'sinon'; import express from 'express'; import { createProxyStateHandler } from './stateHandler'; -import * as setupStatesModule from './setupStates'; -import { ProxyOptions } from '../types'; +import { ProxyOptions, StateHandlers } from '../types'; chai.use(chaiAsPromised); const { expect } = chai; describe('#createProxyStateHandler', () => { + const state = { + state: 'thing exists', + action: 'setup', + }; + let res: any; const mockResponse = { status: (status: number) => { @@ -25,35 +28,42 @@ describe('#createProxyStateHandler', () => { }; context('when valid state handlers are provided', () => { - beforeEach(() => { - sinon.stub(setupStatesModule, 'setupStates').returns(Promise.resolve({})); - }); - afterEach(() => { - (setupStatesModule.setupStates as SinonSpy).restore(); - }); it('returns a 200', async () => { - const h = createProxyStateHandler({} as ProxyOptions); - const data = await h( - {} as express.Request, - mockResponse as express.Response - ); + const stateHandlers = { + 'thing exists': () => Promise.resolve(), + }; - expect(data).to.deep.eq({}); + const h = createProxyStateHandler({ + stateHandlers, + } as ProxyOptions); + return expect( + h( + { + body: state, + } as express.Request, + mockResponse as express.Response + ) + ).to.eventually.be.fulfilled; }); }); context('when there is a problem with a state handler', () => { - beforeEach(() => { - sinon - .stub(setupStatesModule, 'setupStates') - .returns(Promise.reject(new Error('state error'))); - }); - afterEach(() => { - (setupStatesModule.setupStates as SinonSpy).restore(); - }); + const badStateHandlers: StateHandlers = { + 'thing exists': { + setup: () => Promise.reject(new Error('bad')), + }, + }; + it('returns a 500', async () => { - const h = createProxyStateHandler({} as ProxyOptions); - await h({} as express.Request, mockResponse as express.Response); + const h = createProxyStateHandler({ + stateHandlers: badStateHandlers, + } as ProxyOptions); + await h( + { + body: state, + } as express.Request, + mockResponse as express.Response + ); expect(res).to.eql(500); }); diff --git a/src/dsl/verifier/verifier.spec.ts b/src/dsl/verifier/verifier.spec.ts index 4301c4f33..f750fba7e 100644 --- a/src/dsl/verifier/verifier.spec.ts +++ b/src/dsl/verifier/verifier.spec.ts @@ -1,16 +1,14 @@ -import chai from 'chai'; +import proxyquire from 'proxyquire'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import sinon from 'sinon'; import { Server } from 'http'; import serviceFactory, { LogLevel } from '@pact-foundation/pact-core'; -import * as proxy from './proxy/proxy'; import logger from '../../common/logger'; import { VerifierOptions } from './types'; -import { Verifier } from './verifier'; - chai.use(chaiAsPromised); const { expect } = chai; @@ -20,28 +18,44 @@ describe('Verifier', () => { sinon.restore(); }); - const state = 'thing exists'; - let v: Verifier; - let opts: VerifierOptions; let executed: boolean; + const state = 'thing exists'; const providerBaseUrl = 'http://not.exists'; - - beforeEach(() => { - executed = false; - opts = { - providerBaseUrl, - requestFilter: (req, res, next) => { - next(); + const opts: VerifierOptions = { + providerBaseUrl, + requestFilter: (req, res, next) => { + next(); + }, + stateHandlers: { + [state]: () => { + executed = true; + return Promise.resolve(); }, - stateHandlers: { - [state]: () => { - executed = true; - return Promise.resolve(); - }, - }, - }; + }, + }; + + // Mock the module and replace the proxy + const { Verifier } = proxyquire('./verifier', { + './proxy': { + createProxy: () => + ({ + close: (): Server => { + executed = true; + return {} as Server; + }, + address: () => ({ + port: 1234, + family: 'https', + address: 'mock.server.example.com', + }), + }) as Server, + + waitForServerReady: () => Promise.resolve(), + }, }); + let v: typeof Verifier; + describe('#constructor', () => { describe('when given configuration', () => { it('sets the configuration on the object', () => { @@ -96,20 +110,7 @@ describe('Verifier', () => { }); describe('#verifyProvider', () => { - beforeEach(() => { - sinon.stub(proxy, 'createProxy').returns({ - close: (): Server => { - executed = true; - return {} as Server; - }, - address: () => ({ - port: 1234, - family: 'https', - address: 'mock.server.example.com', - }), - } as Server); - sinon.stub(proxy, 'waitForServerReady' as any).returns(Promise.resolve()); - }); + beforeEach(() => {}); describe('when no configuration has been given', () => { it('fails with an error', () => diff --git a/src/httpPact/ffi.spec.ts b/src/httpPact/ffi.spec.ts index 174a4eddc..5487e57e3 100644 --- a/src/httpPact/ffi.spec.ts +++ b/src/httpPact/ffi.spec.ts @@ -1,5 +1,5 @@ import { ConsumerInteraction } from '@pact-foundation/pact-core'; -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import sinon from 'sinon'; import sinonChai from 'sinon-chai'; diff --git a/src/httpPact/index.spec.ts b/src/httpPact/index.spec.ts index 521f04be3..4aaf4b49a 100644 --- a/src/httpPact/index.spec.ts +++ b/src/httpPact/index.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import sinon from 'sinon'; import sinonChai from 'sinon-chai'; diff --git a/src/messageConsumerPact.spec.ts b/src/messageConsumerPact.spec.ts index 54d664218..f0a238b7f 100644 --- a/src/messageConsumerPact.spec.ts +++ b/src/messageConsumerPact.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import sinonChai from 'sinon-chai'; import { diff --git a/src/messageProviderPact.spec.ts b/src/messageProviderPact.spec.ts index 19a2b9ad6..1c3f16496 100644 --- a/src/messageProviderPact.spec.ts +++ b/src/messageProviderPact.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import sinonChai from 'sinon-chai'; import express from 'express'; diff --git a/src/pact.integration.spec.ts b/src/pact.integration.spec.ts index e2e7f5751..eea35d5ef 100644 --- a/src/pact.integration.spec.ts +++ b/src/pact.integration.spec.ts @@ -1,5 +1,5 @@ /* tslint:disable:no-unused-expression no-empty */ -import chai from 'chai'; +import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import sinonChai from 'sinon-chai'; import axios from 'axios'; diff --git a/src/v3/matchers.spec.ts b/src/v3/matchers.spec.ts index 08996a9ba..6e49ec2f3 100644 --- a/src/v3/matchers.spec.ts +++ b/src/v3/matchers.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import * as MatchersV3 from './matchers'; const { expect } = chai; diff --git a/src/v3/xml/xmlElement.spec.ts b/src/v3/xml/xmlElement.spec.ts index 79f622ced..96624a33c 100644 --- a/src/v3/xml/xmlElement.spec.ts +++ b/src/v3/xml/xmlElement.spec.ts @@ -1,4 +1,4 @@ -import chai from 'chai'; +import * as chai from 'chai'; import { describe } from 'mocha'; import { XmlText } from './xmlText'; import { XmlElement } from './xmlElement';