Uji kontrak untuk konsumen Java dan penyedia JavaScript

Sep 01 2020

Kami memiliki 2 layanan di mana yang satu adalah konsumen dari yang lain. Konsumen ditulis dalam Java dan penyedia ditulis dalam JavaScript.

Di sisi konsumen, kami telah menetapkan uji kontrak konsumen menggunakan pact-jvm dan kami dapat membuat kontrak. Dalam kontrak ini tanggapannya didefinisikan seperti:

"response": {
  "status": 200,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": [
    "test"
  ]
},

Di penyedia kami, kami sekarang mencoba untuk menentukan tes kontrak-penyedia menggunakan pact-js tetapi kami mengalami masalah di mana di pact-js kami menggunakan a MessageProviderPactuntuk memverifikasi kontrak. Namun saat menjalankan pengujian, badan diharapkan berada dalam atribut konten seperti ini:

Key: - is expected 
            + is actual 
       Matching keys and values are not shown

       -[
       -  "test"
       -]
       +{
       +  "contents": {
       +    "statusCode": 200,
       +    "body": "[test]"
       +  }
       +}

Kode yang digunakan untuk verifikasi pakta

const p = new MessageProviderPact({
        messageProviders: {
            '': handler
        },
        provider: 'provider-service',
        pactUrls: [
            path.resolve(
                process.cwd(),
                'pacts',
                'consumer-service-provider-service.json'
            )
        ]
    });

Ada ide tentang cara mengatasi ini? Apakah mungkin untuk menggunakan struktur pesan yang serupa dengan kunci konten di sisi konsumen? Atau dapatkah kita menyelesaikannya dengan cara lain di sisi penyedia

Jawaban

MatthewFellows Sep 02 2020 at 06:58

MessageProviderPactadalah untuk interaksi jenis antrian pesan, bukan interaksi HTTP. Saya pikir Anda membutuhkan Verifierkelas standar (https://github.com/pact-foundation/pact-js/#provider-api-testing):

const { Verifier } = require('@pact-foundation/pact');
let opts = {
  ...
};

new Verifier(opts).verifyProvider().then(function () {
    // do something
});