Frisby has many ways of running assertions against the HTTP response. Below are the following methods available by default:
Frisby comes with many handy built-in expect handlers to help you test the HTTP response of your API.
status
- Check HTTP status
header
- Check HTTP header key + value
json
- Match json structure + values
jsonStrict
- Match EXACT json structure + values (extra keys not tested for cause test failures)
jsonTypes
- Match json structure + value types
jsonTypesStrict
- Match EXACT json structure + value types (extra keys not tested for cause test failures)
bodyContains
- Match partial body content (string or regex)
it('should be a teapot', function () {return frisby.get('https://httpbin.org/status/418').expect('status', 418);});
it('should have a JSON Content-Type header', function () {return frisby.get('https://httpbin.org/headers').expect('header', 'Content-Type', 'application/json');});
it('should have a "Host" header with a value of "httpbin.org"', function () {return frisby.get('https://httpbin.org/headers').expect('json', 'headers', {Host: 'httpbin.org'});});
A more complex example:
it ('should return a list of feed items', function () {return frisby.get('https://jsonfeed.org/feed.json').expect('status', 200).expect('json', 'version', 'https://jsonfeed.org/version/1').expect('json', 'title', 'JSON Feed').expect('jsonTypes', 'items.*', { // Assert *each* object in 'items' array'id': Joi.string().required(),'url': Joi.string().uri().required(),'title': Joi.string().required(),'date_published': Joi.date().iso().required(),});});
it('should return all headers as strings', function () {return frisby.get('https://httpbin.org/headers')// Using a wildcard in the path '*' check EACH value.expect('jsonTypes', 'headers.*', frisby.Joi.string());});
Runs an inverse assertion that passes when there is an error thrown. Uses all the same types and arguments as expect()
.
it('should not return an error', function () {return frisby.get('https://httpbin.org/headers')// Should not return an error.expectNot('json', { result: 'error' });});