PageSourceSearch

https://docs-pactflow-preview.netlify.app/assets/js/6af016a3.133f9944.js

js docs-pactflow-preview.netlify.app collected 2026-10-03 10:42:29 UTC 12,360 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkpartners=self.webpackChunkpartners||[]).push([[27275],{15680:(t,e,a)=>{a.d(e,{xA:()=>u,yg:()=>m});var n=a(96540);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function o(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?l(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function i(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},l=Object.keys(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),s=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):o(o({},e),t)),a},u=function(t){var e=s(t.components);return n.createElement(p.Provider,{value:e},t.children)},g="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,u=i(t,["components","mdxType","originalType","parentName"]),g=s(a),d=r,m=g["".concat(p,".").concat(d)]||g[d]||c[d]||l;return a?n.createElement(m,o(o({ref:e},u),{},{components:a})):n.createElement(m,o({ref:e},u))}));function m(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,o=new Array(l);o[0]=d;var i={};for(var p in e)hasOwnProperty.call(e,p)&&(i[p]=e[p]);i.originalType=t,i[g]="string"==typeof t?t:r,o[1]=i;for(var s=2;s<l;s++)o[s]=a[s];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},64358:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=a(58168),r=(a(96540),a(15680));const l={custom_edit_url:"https://github.com/pact-foundation/pact-workshop-js/edit/master/LEARNING.md",title:"Learning Outcomes",sidebar_label:"Learning Outcomes"},o=void 0,i={unversionedId:"docs/workshops/introduction/learning",id:"docs/workshops/introduction/learning",title:"Learning Outcomes",description:"Source Code",source:"@site/docs/docs/workshops/introduction/learning.md",sourceDirName:"docs/workshops/introduction",slug:"/docs/workshops/introduction/learning",permalink:"/docs/workshops/introduction/learning",draft:!1,editUrl:"https://github.com/pact-foundation/pact-workshop-js/edit/master/LEARNING.md",tags:[],version:"current",lastUpdatedBy:"Matt Fellows",lastUpdatedAt:1604037606,formattedLastUpdatedAt:"Oct 30, 2020",frontMatter:{custom_edit_url:"https://github.com/pact-foundation/pact-workshop-js/edit/master/LEARNING.md",title:"Learning Outcomes",sidebar_label:"Learning Outcomes"},sidebar:"university",previous:{title:"Introduction",permalink:"/docs/workshops/introduction"},next:{title:"Pact JS workshop",permalink:"/docs/workshops/introduction/"}},p={},s=[{value:"Source Code",id:"source-code",level:2}],u={toc:s},g="wrapper";function c(t){let{components:e,...a}=t;return(0,r.yg)(g,(0,n.A)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,r.yg)("h2",{id:"source-code"},"Source Code"),(0,r.yg)("p",null,(0,r.yg)("a",{parentName:"p",href:"https://github.com/pact-foundation/pact-workshop-js"},"https://github.com/pact-foundation/pact-workshop-js")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},"Step"),(0,r.yg)("th",{parentName:"tr",align:null},"Title"),(0,r.yg)("th",{parentName:"tr",align:null},"Concept Covered"),(0,r.yg)("th",{parentName:"tr",align:null},"Learning objectives"),(0,r.yg)("th",{parentName:"tr",align:null},"Further Reading"))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step1"},"step 1")),(0,r.yg)("td",{parentName:"tr",align:null},"Create our consumer before the Provider API even exists"),(0,r.yg)("td",{parentName:"tr",align:null},"Consumer-driven design"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"Understand use case"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,(0,r.yg)("a",{parentName:"td",href:"https://martinfowler.com/articles/consumerDrivenContracts.html"},"https://martinfowler.com/articles/consumerDrivenContracts.html"))))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step2"},"step 2")),(0,r.yg)("td",{parentName:"tr",align:null},"Write a unit test for our consumer"),(0,r.yg)("td",{parentName:"tr",align:null},"-"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"How to write a basic unit test for an HTTP Client"),(0,r.yg)("li",null,"Understand how a unit test is unable to catch certain integration issues"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,(0,r.yg)("a",{parentName:"td",href:"https://docs.pact.io/faq/convinceme"},"https://docs.pact.io/faq/convinceme"))))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step3"},"step 3")),(0,r.yg)("td",{parentName:"tr",align:null},"Write a Pact test for our consumer"),(0,r.yg)("td",{parentName:"tr",align:null},"Consumer side pact test"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"Understand basic Consumer-side Pact concepts"),(0,r.yg)("li",null,'Understand "Matchers" to avoid test data brittleness'),(0,r.yg)("li",null,"Demonstrate that Pact tests are able to catch a class of integration problems"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,(0,r.yg)("a",{parentName:"td",href:"https://docs.pact.io/5-minute-getting-started-guide#scope-of-a-consumer-pact-test"},"https://docs.pact.io/5-minute-getting-started-guide#scope-of-a-consumer-pact-test")),(0,r.yg)("li",null,(0,r.yg)("a",{parentName:"td",href:"https://docs.pact.io/best_practices/consumer"},"https://docs.pact.io/best_practices/consumer"))))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step4"},"step 4")),(0,r.yg)("td",{parentName:"tr",align:null},"Verify the consumer pact with the Provider API"),(0,r.yg)("td",{parentName:"tr",align:null},"Provider side pact test"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"Understand basic Provider-side Pact concepts"),(0,r.yg)("li",null,"Place provider side testing in a broader testing context (e.g. where it fits on the pyramid)"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,(0,r.yg)("a",{parentName:"td",href:"https://docs.pact.io/5-minute-getting-started-guide#scope-of-a-provider-pact-test"},"https://docs.pact.io/5-minute-getting-started-guide#scope-of-a-provider-pact-test"))))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step5"},"step 5")),(0,r.yg)("td",{parentName:"tr",align:null},"Fix the consumer's bad assumptions about the Provider"),(0,r.yg)("td",{parentName:"tr",align:null},"Humans talking to humans (collaboration)"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"Understand that a tool facilitates collaboration, it doesn't replace it"))),(0,r.yg)("td",{parentName:"tr",align:null})),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step6"},"step 6")),(0,r.yg)("td",{parentName:"tr",align:null},"Write a pact test for ",(0,r.yg)("inlineCode",{parentName:"td"},"404")," (missing User) in consumer"),(0,r.yg)("td",{parentName:"tr",align:null},"Testing API invariants"),(0,r.yg)("td",{parentName:"tr",align:null}
1,(0,r.yg)("ul",null,(0,r.yg)("li",null,'Understand how we can test "stateful" APIs without having to create complex, sequential API calls'))),(0,r.yg)("td",{parentName:"tr",align:null})),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step7"},"step 7")),(0,r.yg)("td",{parentName:"tr",align:null},"Update API to handle ",(0,r.yg)("inlineCode",{parentName:"td"},"404")," case"),(0,r.yg)("td",{parentName:"tr",align:null},"Provider States"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,'How Pact deals with "stateful" interactions, via the concept of "Provider States"'))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,(0,r.yg)("a",{parentName:"td",href:"https://docs.pact.io/getting_started/provider_states"},"https://docs.pact.io/getting_started/provider_states"))))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step8"},"step 8")),(0,r.yg)("td",{parentName:"tr",align:null},"Write a pact test for the ",(0,r.yg)("inlineCode",{parentName:"td"},"401")," case"),(0,r.yg)("td",{parentName:"tr",align:null},"Testing authenticated APIs"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"Service evolution - adding a new feature"))),(0,r.yg)("td",{parentName:"tr",align:null})),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step9"},"step 9")),(0,r.yg)("td",{parentName:"tr",align:null},"Update API to handle ",(0,r.yg)("inlineCode",{parentName:"td"},"401")," case"),(0,r.yg)("td",{parentName:"tr",align:null},"Service evolution"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"Understand the challenge of dealing with complex/dynamic data, such as time-bound authentication tokens"))),(0,r.yg)("td",{parentName:"tr",align:null})),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step10"},"step 10")),(0,r.yg)("td",{parentName:"tr",align:null},"Fix the provider to support the ",(0,r.yg)("inlineCode",{parentName:"td"},"401")," case"),(0,r.yg)("td",{parentName:"tr",align:null},"Request filters"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"Understand Pact's approach to dealing with complex/dynamic data, such as time-bound authentication tokens"))),(0,r.yg)("td",{parentName:"tr",align:null})),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://github.com/pact-foundation/pact-workshop-js/tree/step11"},"step 11")),(0,r.yg)("td",{parentName:"tr",align:null},"Implement a broker workflow for integration with CI/CD"),(0,r.yg)("td",{parentName:"tr",align:null},"Automation"),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,"Understand how to use Pact in a CI and CD workflow"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("ul",null,(0,r.yg)("li",null,(0,r.yg)("a",{parentName:"td",href:"https://docs.pact.io/pact_broker"},"https://docs.pact.io/pact_broker")),(0,r.yg)("li",null,(0,r.yg)("a",{parentName:"td",href:"https://docs.pact.io/best_practices/pact_nirvana"},"https://docs.pact.io/best_practices/pact_nirvana"))))))))}c.isMDXComponent=!0}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.