Coder Social home page Coder Social logo

pact-consumer-js-dsl's Introduction

Pact Consumer Javascript DSL

This DSL is in very early stages of development, please bear with us as we give it some polish. Please raise any problems you have in the github issues. Check out the Development Roadmap to see where we are headed.

This codebase provides a Javascript DSL for creating pacts. If you are new to Pact, please read the Pact README first.

This DSL relies on the Ruby pact-mock_service gem to provide the mock service for the Javascript tests. If you do not want to use Ruby in your project, please read about using a standalone Pact mock service here.

Getting Started (with Karma, Jasmine and the pact-mock_service gem)

  1. Install the pact-mock_service ruby gem

    The easiest way is to add gem 'pact-mock_service', '~> 0.2.3.pre.rc1' to your Gemfile and run bundle install

  2. Install and configure Karma with Jasmine

  3. Create a package.json if you don't have one already - use npm init if you don't

  4. Install Karma using their installation instructions

This basically consists of running,

* `npm install karma --save-dev`
* `npm install karma-jasmine karma-chrome-launcher --save-dev`
* `npm install -g karma-cli`
  1. Initialise and configure Karma
Run `karma init`. Answer **jasmine** for *testing framework* and **no** for *use require.js*.
  1. Add pact-consumer-js-dsl to your project by running npm install DiUS/pact-consumer-js-dsl#X.Y.Z --save-dev, where X.Y.Z is the latest stable version, according to the releases page.

  2. Tell Karma about pact-consumer-js-dsl.js in karma.conf.js. In the files: [] section add a new entry for node_modules/pact-consumer-js-dsl/dist/pact-consumer-js-dsl.js.

  3. Allow tests to load resources from pact mock server. One way to do this is in the karma.conf.js, change browsers: ['Chrome'], to,

    ````
    browsers: ['Chrome_without_security'],
    customLaunchers: {
       Chrome_without_security: {
           base: 'Chrome',
           flags: ['--disable-web-security']
       }
    }
    ````
    

Note that running your tests across multiple browsers with one pact mock server will probably conflict with each other. You will need to either run them sequentially or start multiple pact mock servers. To run them sequentially make multiple calls to karma from the command line with the different browsers passed with the --browser option.

  1. Write a Jasmine unit test similar to the following,

     describe("Client", function(done) {
    
         var client, helloProvider;
    
         beforeEach(function() {
    
           client = new ProviderClient('http://localhost:1234');
           helloProvider = MockService.create(
             consumer: 'Hello Consumer',
             provider: 'Hello Provider',
             port: 1234,
             pactDir: '.');
         });
    
         it("should say hello", function() {
    
             helloProvider
               .uponReceiving("a request for hello")
               .withRequest("get", "/sayHello")
               .willRespondWith(200, {
                 "Content-Type": "application/json"
               }, {
                 reply: "Hello"
               });
    
               helloProvider.run(function(runComplete) {
                 expect(client.sayHello()).toEqual("Hello");
                 runComplete(done);
               });
         });
      });
    

    See the spec in the example directory for examples of asynchronous callbacks, how to expect error responses, and how to use query params.

    Make sure the source and test files are included by Karma in the karma.conf.js in the files array.

  2. Let's run that bad boy!

    • start the pact mock server with bundle exec pact-mock-service -p 1234 -l /tmp/pact.logs
    • run karma start (in another terminal window)
    • inspect the pact file that has been written to "hello_consumer-hello_provider.json"

Example

Have a look at the example folder. Ensure you have Google Chrome installed.

$ cd example
$ npm install
$ script/test.sh

Contributing

Please read CONTRIBUTING.md

pact-consumer-js-dsl's People

Contributors

bensayers avatar bethesque avatar fuying avatar jdoxey avatar kaushalye avatar tarciosaraiva avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.