the documentation in Pact-Pythonによると、これは実際にどのように達成されたのか少しオープンです。個人的には、通常、Pythonで動作しないノードプロバイダは、私のプロバイダテストの中にありますが、私は、未使用のポートにサーバを作成します。未使用のポートは、契約から州を受け取って設定することです正しく。テストを実行すると、この小さなサーバーは、コンシューマー、プロバイダー、および状態を含むJSONファイルで協調して攻撃を受けます。
例えば、ここではノードの例です:
var http = require('http');
beforeAll(function(){
// PROVIDER STATE LISTENER
http.createServer(function (req, res) {
var body = [];
// Ignore this bit, this is just how node does server request/response
req.on('data', (chunk) => {
body.push(chunk);
}).on('end',() => {
// Get body, parse JSON. JSON includes 'consumer' string and 'states' array of string
var json = JSON.parse(Buffer.concat(body).toString());
// THIS IS WHERE YOU NEED TO SETUP YOUR STATE
res.status = 200;
switch(json.state) {
case "When User does something": // this is the actual name of the state that's specified by your consumer, which is found in the contract
// Setup any data that relates to your state here, like adding rows to a DB, setting environment variables, etc
break;
// Add another states that are used in your provider tests
default:
res.status = 500;
res.statusMessage = "Missing state '" + json.state + "'";
}
res.end(); // Send the response back
});
}).listen(9001);
})
// Run your tests
it("Test Pact Interactions", function() {
return pact.verifyPacts({
// options here
providerStatesSetupUrl: "http://localhost:9001"
});
});
私はそれが理にかなって願っています。ここで
この文書を正しく読んでいる場合は、プロバイダーの状態は1つしかない可能性があります。それはプロバイダー国の目的を完全に排除するものではありませんか? 1つしかない場合は、常にテストデータを保持するか、ハードコードされたセットアップルーチンを使用することもできます。 – ewok
また、プロバイダーの状態をどのように破棄しますか? – ewok
インタラクションごとに1つの状態があります。データを事前に設定することはできますが、消費者側からどのテストを行う必要があるかを前提としていますが、将来複雑になると問題になる可能性があります。ティアダウンに関しては、私は通常、すべての変更を追跡するものにすべての変更をラップし、新しい設定が行われたときに、以前にあったものはすべてクリアします。ルビーバージョンにはティアダウンがありますが、Pythonのようには見えません。 –