1

pact テストを使用して、プロバイダーが応答で画像を提供できるかどうかを確認したいと考えています。実際の応答 は、画像を含むこのサーバー応答本文のようになります

私のPact Jsonファイルは次のようになります

  "interactions": [
    {
      "providerState": "there's a user has a portrait tiger.png",
      "description": "Get the user's portrait",
      "request": {
        "method": "GET",
        "path": "/api/Employees/v1/Employee/106656048406528/Attachments",
        "headers": {
          "Content-Type": "application/json",
          "X-Employee-ID": "106656048406528",
          "X-Tenant-ID": "26663977872256",
          "X-User-ID": "1333"
        }
      },
      "response": {
        "status": 200,
        "headers": {
          "Content-Type": "image/jpeg;charset=UTF-8"
        },
        "body": "iVBORw0KGgoAAAANSU",
        "matchingRules": {
            "$.body": {
            "match": "type"
          }
        }
      }
    }
  ],

パクトテストは常に失敗し、体の不一致を言います。実際の応答が base64 形式でも文字列でもないことは理解できます。いくつかのバイナリファイルが必要です。この場合、バイナリ ファイルであることを有効にするマッチング ルールをどのように記述すればよいでしょうか。

4

2 に答える 2

2

これを行う方法は、毎回正確なバイナリを一致させたい場合を除き、本体を無視することです。これは、私の意見では非生産的です。

バイナリ ファイルが送信されると、「Content-Type」との契約にすでにあるように、適切なヘッダーが送信されます。本文がそこになければならないという一致ルールをいつでも追加できますが、コンテンツは気にしませんが、「Content-Length」ヘッダーを見るだけでよいので、これが必要かどうかはわかりません0より大きいことを確認してください。

覚えておく必要があるのは、Pact はすべてを一致させるために使用することを意図したものではないということです。これは、システムの重要な部分と消費者からの特定の期待に一致させることを目的としています。消費者として、画像を提供するこのサービスを呼び出したいのですが、DOM で表示するだけなので、その画像が何であるかは気にしません。テスト中にコンシューマー側で実際の画像を提供する必要がある場合は、マッチャー クエリを使用して、正規表現を使用して何かを解決し、ジェネレーターとして実際の画像出力を使用できます。Pact は何メガバイトものバイナリを吐き出すことを正確に意図したものではないので、もし私があなただったら、何か小さなものを使用します。

于 2016-12-15T00:50:11.853 に答える