Minimal Pact consumer test with Clojure
code:clojure
(ns pact-test-clj
(deftest basic-pact-test
(ConsumerPactRunnerKt/runConsumerTest
(-> (ConsumerPactBuilder/consumer "Consumer")
(.hasPactWith "Provider")
(.uponReceiving "a request to say Hello")
(.path "/hello")
(.method "POST")
(.body "{\"name\": \"harry\"}")
(.willRespondWith)
(.status 200)
(.body "{\"hello\": \"harry\"}")
(.toPact))
(MockProviderConfig/createDefault)
(reify
PactTestRun
@(http/post (str (.getUrl mock-server) "/hello")
{:body (cheshire.core/encode {:name "harry"})})]
(is (= {:hello "harry"} (cheshire.core/decode (slurp body) keyword)))
(is (= 200 status)))))))
難しかった点
PactTestRun
is何
ただのinterfaceだったのでreifyでok
import au.com.dius.pact.consumer.junit.exampleclients.ProviderClient;
=> mvn artifactには入っていない (class not found)
ソースにあたると要はhttpクライアントをラップしているだけだったっぽいのでaleph.httpを使った