forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelpers.js
47 lines (35 loc) · 1.4 KB
/
helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 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('../server')
const helpers = {}
const request = (method, route) => supertest(app)[method](route)
helpers.get = async function (route, opts = { followRedirects: false, followAllRedirects: false }) {
let res = 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) {
const res = await helpers.get(route, { followRedirects: true })
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