pact-foundation / pact-js

JS version of Pact. Pact is a contract testing framework for HTTP APIs and non-HTTP asynchronous messaging systems.
https://pact.io
Other
1.61k stars 344 forks source link

The v4 package is currently in beta and requires the 'ENABLE_FEATURE_V4' environment variable to be set #984

Closed denishaskin closed 1 year ago

denishaskin commented 1 year ago

Software versions

Note! Mac M1 hardware...

Issue Checklist

Please confirm the following:

Expected behaviour

Our pact tests which previously passed should continue to pass.

Actual behaviour

Test fails with

  ● Test suite failed to run

    The v4 package is currently in beta and requires the 'ENABLE_FEATURE_V4' environment variable to be set

    > 1 | import { Pact } from '@pact-foundation/pact';
        | ^
      2 | import path from 'path';
      3 | import { Express } from 'express';
      4 | import request from 'supertest';

      at Object.<anonymous> (node_modules/@pact-foundation/src/v4/index.ts:10:9)
      at Object.<anonymous> (node_modules/@pact-foundation/src/index.ts:87:1)
      at Object.<anonymous> (src/__tests__/pact/consumer.pact.ts:1:1)

I tried adding an env var of ENABLE_FEATURE_V4=true, not change in behavior.

Steps to reproduce

How can someone else reproduce this bug?

For extra bonus points and internet karma, provide a repository, gist or reproducible code snippet so that we can test the problem.

We recommend forking the project and modifying a relevant example in the examples folder

Relevant log files

➜  metric-service git:(feature/<branch>) ✗ DEBUG=* yarn test src/__tests__/pact/consumer.pact.ts
yarn run v1.22.19
$ ENV_FILE=./config/.env.test npx jest --coverage --detectOpenHandles src/__tests__/pact/consumer.pact.ts
[16:55:31.494][emittery:subscribe][undefined] Event Name: test-file-start
    data: undefined
[16:55:31.496][emittery:emit][undefined] Event Name: Symbol(listenerAdded)
    data: {"eventName":"test-file-start"}
[16:55:31.496][emittery:subscribe][undefined] Event Name: test-file-success
    data: undefined
[16:55:31.496][emittery:emit][undefined] Event Name: Symbol(listenerAdded)
    data: {"eventName":"test-file-success"}
[16:55:31.496][emittery:subscribe][undefined] Event Name: test-file-failure
    data: undefined
[16:55:31.496][emittery:emit][undefined] Event Name: Symbol(listenerAdded)
    data: {"eventName":"test-file-failure"}
[16:55:31.496][emittery:subscribe][undefined] Event Name: test-case-result
    data: undefined
[16:55:31.496][emittery:emit][undefined] Event Name: Symbol(listenerAdded)
    data: {"eventName":"test-case-result"}
[16:55:31.497][emittery:emit][undefined] Event Name: test-file-start
    data: [{"context":{"config":{"automock":false,"cache":true,"cacheDirectory":"/private/var/folders/rc/wtspg4y90jjb0ln57nx1xnf00000gp/T/jest_dy","clearMocks":true,"coveragePathIgnorePatterns":["/node_modules/"],"cwd":"/Users/denis/em/metric-service","detectLeaks":false,"detectOpenHandles":true,"errorOnDeprecated":false,"extensionsToTreatAsEsm":[".ts"],"fakeTimers":{"enableGlobally":false},"forceCoverageMatch":[],"globals":{},"haste":{"computeSha1":false,"enableSymlinks":false,"forceNodeFilesystemAPI":true,"throwOnModuleCollision":false},"id":"e6198fae5298675bd656f80ffd580e37","injectGlobals":true,"moduleDirectories":["node_modules"],"moduleFileExtensions":["js","mjs","cjs","jsx","ts","tsx","json","node"],"moduleNameMapper":[["^@/(.*)$",["/Users/denis/em/metric-service/src/$1","/Users/denis/em/metric-service/dist/$1"]]],"modulePathIgnorePatterns":[],"prettierPath":"prettier","resetMocks":false,"resetModules":false,"restoreMocks":true,"rootDir":"/Users/denis/em/metric-service","roots":["/Users/denis/em/metric-service"],"runner":"/Users/denis/em/metric-service/node_modules/jest-runner/build/index.js","sandboxInjectedGlobals":[],"setupFiles":[],"setupFilesAfterEnv":[],"skipFilter":false,"slowTestThreshold":5,"snapshotSerializers":[],"testEnvironment":"/Users/denis/em/metric-service/node_modules/jest-environment-node/build/index.js","testEnvironmentOptions":{},"testLocationInResults":false,"testMatch":["/Users/denis/em/metric-service/src/**/__tests__/**/*.[jt]s?(x)","/Users/denis/em/metric-service/src/**/?(*.)+(spec|test).[tj]s?(x)"],"testPathIgnorePatterns":["/node_modules/"],"testRegex":[],"testRunner":"/Users/denis/em/metric-service/node_modules/jest-circus/runner.js","transform":[["^.+\\.tsx?$","/Users/denis/em/metric-service/node_modules/ts-jest/dist/index.js",{"useESM":true}]],"transformIgnorePatterns":["/node_modules/","\\.pnp\\.[^\\/]+$"],"watchPathIgnorePatterns":[]},"hasteFS":{"_rootDir":"/Users/denis/em/metric-service","_files":{}},"moduleMap":{"duplicates":[["metric-service",[["g",[["dist/package.json",1],["package.json",1]]]]]],"map":[["metric-service",{}]],"mocks":[],"rootDir":"/Users/denis/em/metric-service"},"resolver":{"_options":{"extensions":[".js",".mjs",".cjs",".jsx",".ts",".tsx",".json",".node"],"hasCoreModules":true,"moduleDirectories":["node_modules"],"moduleNameMapper":[{"moduleName":["/Users/denis/em/metric-service/src/$1","/Users/denis/em/metric-service/dist/$1"],"regex":{}}],"rootDir":"/Users/denis/em/metric-service"},"_moduleMap":{"duplicates":[["metric-service",[["g",[["dist/package.json",1],["package.json",1]]]]]],"map":[["metric-service",{}]],"mocks":[],"rootDir":"/Users/denis/em/metric-service"},"_moduleIDCache":{},"_moduleNameCache":{},"_modulePathCache":{},"_supportsNativePlatform":false}},"duration":0,"path":"/Users/denis/em/metric-service/src/__tests__/pact/consumer.pact.ts"}]
[16:55:32.950][emittery:emit][undefined] Event Name: test-file-failure
    data: [{"context":{"config":{"automock":false,"cache":true,"cacheDirectory":"/private/var/folders/rc/wtspg4y90jjb0ln57nx1xnf00000gp/T/jest_dy","clearMocks":true,"coveragePathIgnorePatterns":["/node_modules/"],"cwd":"/Users/denis/em/metric-service","detectLeaks":false,"detectOpenHandles":true,"errorOnDeprecated":false,"extensionsToTreatAsEsm":[".ts"],"fakeTimers":{"enableGlobally":false},"forceCoverageMatch":[],"globals":{},"haste":{"computeSha1":false,"enableSymlinks":false,"forceNodeFilesystemAPI":true,"throwOnModuleCollision":false},"id":"e6198fae5298675bd656f80ffd580e37","injectGlobals":true,"moduleDirectories":["node_modules"],"moduleFileExtensions":["js","mjs","cjs","jsx","ts","tsx","json","node"],"moduleNameMapper":[["^@/(.*)$",["/Users/denis/em/metric-service/src/$1","/Users/denis/em/metric-service/dist/$1"]]],"modulePathIgnorePatterns":[],"prettierPath":"prettier","resetMocks":false,"resetModules":false,"restoreMocks":true,"rootDir":"/Users/denis/em/metric-service","roots":["/Users/denis/em/metric-service"],"runner":"/Users/denis/em/metric-service/node_modules/jest-runner/build/index.js","sandboxInjectedGlobals":[],"setupFiles":[],"setupFilesAfterEnv":[],"skipFilter":false,"slowTestThreshold":5,"snapshotSerializers":[],"testEnvironment":"/Users/denis/em/metric-service/node_modules/jest-environment-node/build/index.js","testEnvironmentOptions":{},"testLocationInResults":false,"testMatch":["/Users/denis/em/metric-service/src/**/__tests__/**/*.[jt]s?(x)","/Users/denis/em/metric-service/src/**/?(*.)+(spec|test).[tj]s?(x)"],"testPathIgnorePatterns":["/node_modules/"],"testRegex":[],"testRunner":"/Users/denis/em/metric-service/node_modules/jest-circus/runner.js","transform":[["^.+\\.tsx?$","/Users/denis/em/metric-service/node_modules/ts-jest/dist/index.js",{"useESM":true}]],"transformIgnorePatterns":["/node_modules/","\\.pnp\\.[^\\/]+$"],"watchPathIgnorePatterns":[]},"hasteFS":{"_rootDir":"/Users/denis/em/metric-service","_files":{}},"moduleMap":{"duplicates":[["metric-service",[["g",[["dist/package.json",1],["package.json",1]]]]]],"map":[["metric-service",{}]],"mocks":[],"rootDir":"/Users/denis/em/metric-service"},"resolver":{"_options":{"extensions":[".js",".mjs",".cjs",".jsx",".ts",".tsx",".json",".node"],"hasCoreModules":true,"moduleDirectories":["node_modules"],"moduleNameMapper":[{"moduleName":["/Users/denis/em/metric-service/src/$1","/Users/denis/em/metric-service/dist/$1"],"regex":{}}],"rootDir":"/Users/denis/em/metric-service"},"_moduleMap":{"duplicates":[["metric-service",[["g",[["dist/package.json",1],["package.json",1]]]]]],"map":[["metric-service",{}]],"mocks":[],"rootDir":"/Users/denis/em/metric-service"},"_moduleIDCache":{},"_moduleNameCache":{},"_modulePathCache":{},"_supportsNativePlatform":false}},"duration":0,"path":"/Users/denis/em/metric-service/src/__tests__/pact/consumer.pact.ts"},{}]
 FAIL  src/__tests__/pact/consumer.pact.ts
  ● Test suite failed to run

    The v4 package is currently in beta and requires the 'ENABLE_FEATURE_V4' environment variable to be set

    > 1 | import { Pact } from '@pact-foundation/pact';
        | ^
      2 | import path from 'path';
      3 | import { Express } from 'express';
      4 | import request from 'supertest';

      at Object.<anonymous> (node_modules/@pact-foundation/src/v4/index.ts:10:9)
      at Object.<anonymous> (node_modules/@pact-foundation/src/index.ts:87:1)
      at Object.<anonymous> (src/__tests__/pact/consumer.pact.ts:1:1)

[16:55:32.962][emittery:unsubscribe][undefined] Event Name: test-file-start
    data: undefined
[16:55:32.962][emittery:emit][undefined] Event Name: Symbol(listenerRemoved)
    data: {"eventName":"test-file-start"}
[16:55:32.962][emittery:unsubscribe][undefined] Event Name: test-file-success
    data: undefined
[16:55:32.962][emittery:emit][undefined] Event Name: Symbol(listenerRemoved)
    data: {"eventName":"test-file-success"}
[16:55:32.962][emittery:unsubscribe][undefined] Event Name: test-file-failure
    data: undefined
[16:55:32.962][emittery:emit][undefined] Event Name: Symbol(listenerRemoved)
    data: {"eventName":"test-file-failure"}
[16:55:32.962][emittery:unsubscribe][undefined] Event Name: test-case-result
    data: undefined
[16:55:32.962][emittery:emit][undefined] Event Name: Symbol(listenerRemoved)
    data: {"eventName":"test-case-result"}
---------------------------------------------|---------|----------|---------|---------|-------------------
File                                         | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
---------------------------------------------|---------|----------|---------|---------|-------------------
All files                                    |       0 |        0 |       0 |       0 |
...omitted...
---------------------------------------------|---------|----------|---------|---------|-------------------
Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        1.723 s
Ran all test suites matching /src\/__tests__\/pact\/consumer.pact.ts/i.

Jest has detected the following 1 open handle potentially keeping Jest from exiting:

  ●  WORKER

    > 1 | import { Pact } from '@pact-foundation/pact';
        | ^
      2 | import path from 'path';
      3 | import { Express } from 'express';
      4 | import request from 'supertest';

      at createWorker (node_modules/thread-stream/index.js:52:18)
      at new ThreadStream (node_modules/thread-stream/index.js:223:19)
      at buildStream (node_modules/pino/lib/transport.js:21:18)
      at transport (node_modules/pino/lib/transport.js:110:10)
      at normalizeArgs (node_modules/pino/lib/tools.js:291:16)
      at Function.pino (node_modules/pino/pino.js:86:28)
      at Object.createLogger (node_modules/@pact-foundation/pact-core/src/logger/pino.ts:5:3)
      at Object.<anonymous> (node_modules/@pact-foundation/pact-core/src/logger/index.ts:10:14)
      at Object.<anonymous> (node_modules/@pact-foundation/pact-core/src/service.ts:4:1)
      at Object.<anonymous> (node_modules/@pact-foundation/pact-core/src/server.ts:1:1)
      at Object.<anonymous> (node_modules/@pact-foundation/pact-core/src/pact.ts:2:1)
      at Object.<anonymous> (node_modules/@pact-foundation/pact-core/src/index.ts:1:1)
      at Object.<anonymous> (node_modules/@pact-foundation/src/httpPact/index.ts:2:1)
      at Object.<anonymous> (node_modules/@pact-foundation/src/index.ts:25:1)
      at Object.<anonymous> (src/__tests__/pact/consumer.pact.ts:1:1)

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
denishaskin commented 1 year ago

Note that adding

const mockProvider = new Pact({
  logLevel: 'debug',

didn't produce any additional output than what is given above

YOU54F commented 1 year ago

hmm odd, I have been running the v4 tests from the repo on my m1 fine,

Could you try the pact-js v4 examples please and see if they work for you? You can change the package.json to use the published version, or run npm run dist in the main folder to build the main pact-js library

https://github.com/pact-foundation/pact-js/tree/master/examples/v4/plugins

mefellows commented 1 year ago

[x ] I have upgraded to the latest

I don't think you're on the latest (the latest is 10.3.1)? There was a version that had the check in the root of the v4 module, which caused that bug. The latest in the 10.x.x line shouldn't have this issue.