/node-fetch-response-matchers

Chai.js plugin for node-fetch response asserts

Primary LanguageJavaScriptMIT LicenseMIT

node-fetch-response-matchers

Build Status

Chai plugin with matchers for node-fetch promise response. It helps the tests to be more declarative.

TL;DR

  • This lib gives you a declarative way to assert fetch response, Also it hides the promises and their callbacks noise:
   it('some-test', function(){
     return expect(fetch('http://localhost/')).to.be.successful()
                            .and.to.haveBodyText('foo');

   });
  • If you are not using this lib it becomes very verbose:
   it('some-test', function(done){
      fetch('http://localhost/')
         .then(res => {
            expect(res.status).to.equal(200);
            return res.text();
         }).then(text => {
            expect(text).to.equal('foo');
            done();
         })
   });

Install (for dev only - used by tests)

$ npm install --save-dev node-fetch-response-matchers

Usage example

const nodeFetchMatchers = require('node-fetch-response-matchers');
const fetch = require('node-fetch');
const chai = require('chai');

chai.use(nodeFetchMatchers);

describe('test suite', function(){
    it('http success test', function(){
        return expect(fetch('http://localhost/')).to.be.successful();
    });
    it('and', function(){
          return expect(fetch('http://localhost/')).to.be.successful()
                                                    .and.haveBodyText('foo');
    });
});

Chai native plugin

You can all use chai "not"

   it('not', function(){
      return expect(fetch('http://localhost/')).to.not.be.successful();
   });

Status matchers

   it('http success test', function(){
      return expect(fetch('http://localhost/')).to.be.successful();
   });
   it('http status assert', function(){
        return expect(fetch('http://localhost/')).to.haveStatus(500);
   });

Full status matchers list

API function params description
successful() () Assert that the status is 200 OK
created() () Assert that the status is 201
unauthorized() () Assert that the status is 401
rejected() () Assert that the status is 403
notFound() () Assert that the status is 404
serverError() () Assert that the status is 500
serviceUnAvailable() () Assert that the status is 503
haveStatus() (status) Assert that the status is provided number argument

Body matchers

   it('have body object', () => {
     return expect(fetch('http://localhost/').to.haveBodyObject({foo: 'bar'});
   });

Full body matchers list

API function params description
haveBodyObject() (obj) Assert equal provided object
haveBodyText() (text) Assert equal provided string text
haveBodyRegexpMatch() (regexp) Assert match body on regular expression
haveBodyThat() (predicate(text)) Assert match body on provided function predicate on the text

Header matchers

   it('have header', () => {
     return expect(fetch('http://localhost/').to.haveHeader('connection', 'close');
   });

Headers matchers list

API function params description
haveHeader() (name, value) Assert that response contains header by provided name and value
headerExists() (name) Assert that response contains header by provided name
haveHeaderThat() (name, predicate(value)) Assert that header with given name have true on the value for a given predicate
haveHeaders() (headersMap) Assert that given key-value headers are exists in headers response

Cookie matchers

   it('have cookie', () => {
     return expect(fetch('http://localhost/').to.haveCookie('foo', 'bar');
   });

Cookie matchers list

API function params description
haveCookieByName() (name) Assert that cookie by name is written to the response
haveCookie() (name, value) Assert that cookie by name and value is written to the response
haveCookieThat() (name, predicate(cookie)) Assert that cookie by name and match given predicate on cookie properties

Cache control response matchers

   it('must-revalidate', () => {
     return expect(fetch('http://localhost/').to.have.cacheControlMustRevalidate();
   });
   it('max-age', () => {
        return expect(fetch('http://localhost/').to.have.cacheControlmMaxAge(120);
   });

cache control full matchers list

API function params
cacheControlMustRevalidate() ()
cacheControlNoCache() ()
cacheControlNoStore() ()
cacheControlNoTransform() ()
cacheControlPublic() ()
cacheControlPrivate() ()
cacheControlProxyMaxRevalidate ()
cacheControlmMaxAge() (age-in-sec)
cacheControlSMaxAge() (age-in-sec)