pact-foundation/pact-js

(TypeScript) Cannot use V3 matchers within MessagePact. Types are incompatible.

murbanowicz opened this issue · 3 comments

Software versions

TypeScript: 5.2.2
"@pact-foundation/pact": "12.1.0"

Issue Checklist

Please confirm the following:

  • I have upgraded to the latest
  • I have the read the FAQs in the Readme
  • I have triple checked, that there are no unhandled promises in my code and have read the section on intermittent test failures

Expected behaviour

I should be able to use v3 matchers

Actual behaviour

Types are incompatible

Steps to reproduce

import * as path from 'path';
import { MessageConsumerPact, MatchersV3 } from '@pact-foundation/pact';

const messagePact = new MessageConsumerPact({
  consumer: 'example-shipment-service',
  dir: path.resolve(process.cwd(), 'pacts'),
  pactfileWriteMode: 'update',
  provider: 'example-orders-service',
});

describe('Consumer: example-shipment-service, Provider: example-orders-service', () => {
  it('order-confirmed event', () => {
    return messagePact.expectsToReceive('order-confirmed').withContent({
      type: MatchersV3.equal('order-confirmed'),
    });
  });
});

gives the following error:

TS2345: Argument of type { type: MatchersV3.Matcher<string>; } is not assignable to parameter of type AnyTemplate
Types of property type are incompatible.
Type Matcher<string> is not assignable to type
string | number | boolean | JsonArray | JsonMap | Matcher<AnyTemplate> | ArrayMatcher<AnyTemplate> | TemplateMap | ArrayTemplate
Type Matcher<string> is not assignable to type TemplateMap
Index signature for type string is missing in type Matcher<string>

It will only work without error when using Matchers which I believe are V2 matches and are missing quite a lot of stuff.

Relevant log files

Please ensure you set logging to DEBUG and attach any relevant log files here (or link to a gist).

This should be fixed now in the latest release.

@mefellows Which version of pact-js do you consider to contain the fix? With 12.1.2 (running on Windows) the problem still seems to exist.

The fix addressed the main body but not the matchers, which I believe is what you need. It should be straightforward, I'll see if I can patch it tomorrow for you