docs/tests/helpers/supertest.js

46 строки
1.5 KiB
JavaScript

// This file exports an object with utility functions for re-use in
// multiple test files
const cheerio = require('cheerio')
const supertest = require('supertest')
const app = require('../../lib/app')
const helpers = {}
const request = (method, route) => supertest(app)[method](route)
helpers.get = async function (route, opts = { followRedirects: false, followAllRedirects: false, headers: {} }) {
let res = (opts.headers) ? await request('get', route).set(opts.headers) : await request('get', route)
// follow all redirects, or just follow one
if (opts.followAllRedirects && [301, 302].includes(res.status)) {
res = await helpers.get(res.headers.location, opts)
} else if (opts.followRedirects && [301, 302].includes(res.status)) {
res = await helpers.get(res.headers.location)
}
return res
}
helpers.head = async function (route, opts = { followRedirects: false }) {
const res = await request('head', route).redirects(opts.followRedirects ? 10 : 0)
return res
}
helpers.post = route => request('post', route)
helpers.getDOM = async function (route, headers) {
const res = await helpers.get(route, { followRedirects: true, headers })
const $ = cheerio.load((res.text || ''), { xmlMode: true })
$.res = Object.assign({}, res)
return $
}
// For use with the ?json query param
// e.g. await getJSON('/en?json=breadcrumbs')
helpers.getJSON = async function (route) {
const res = await helpers.get(route, { followRedirects: true })
return JSON.parse(res.text)
}
module.exports = helpers