UNPKG

node-fetch-response-matchers

Version:

Chai asserts for node-fetch response promise, make your tests with http more declarative

174 lines (133 loc) 6.48 kB
# node-fetch-response-matchers [![Build Status](https://travis-ci.org/kfiron/node-fetch-response-matchers.svg?branch=master)](https://travis-ci.org/kfiron/node-fetch-response-matchers) 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: ```javascript 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: ```javascript 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) ```shell $ npm install --save-dev node-fetch-response-matchers ``` ## Usage example ```javascript 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" ```javascript it('not', function(){ return expect(fetch('http://localhost/')).to.not.be.successful(); }); ``` ## Status matchers ```javascript 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 | | badRequest() | () | Assert that the status is 400 | | 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 ```javascript 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 | | haveBodyBuffer() | (Buffer) | Assert equal provided Node Buffer | | haveBodyRegexpMatch() | (regexp) | Assert match body on regular expression | | haveBodyThat() | (predicate(text)) | Assert match body on provided function predicate on the text | ## Header matchers ```javascript 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 ```javascript 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 ```javascript 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)|