Nuxt/test/utils/browser.js

77 lines
2.1 KiB
JavaScript
Raw Normal View History

2017-11-01 15:44:27 +00:00
import puppeteer from 'puppeteer'
let browser = null
export async function start(options = {}) {
2017-11-01 15:44:27 +00:00
// https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#puppeteerlaunchoptions
2018-01-13 05:22:11 +00:00
browser = await puppeteer.launch(
Object.assign(
{
args: ['--no-sandbox', '--disable-setuid-sandbox']
},
options
)
)
2017-11-01 15:44:27 +00:00
}
2018-03-18 23:41:14 +00:00
export async function close() {
2017-11-01 15:44:27 +00:00
if (!browser) return
await browser.close()
}
export async function page(url) {
if (!browser) throw new Error('Please call start() before page(url)')
const page = await browser.newPage()
await page.goto(url)
await page.waitForFunction('!!window.$nuxt')
2018-01-13 05:22:11 +00:00
page.html = () =>
page.evaluate(() => window.document.documentElement.outerHTML)
page.$text = selector => page.$eval(selector, el => el.textContent)
page.$$text = selector =>
page.$$eval(selector, els => els.map(el => el.textContent))
page.$attr = (selector, attr) =>
page.$eval(selector, (el, attr) => el.getAttribute(attr), attr)
page.$$attr = (selector, attr) =>
page.$$eval(
selector,
(els, attr) => els.map(el => el.getAttribute(attr)),
attr
)
2017-11-01 15:44:27 +00:00
page.$nuxt = await page.evaluateHandle('window.$nuxt')
page.nuxt = {
async navigate(path, waitEnd = true) {
2017-11-07 15:55:54 +00:00
const hook = page.evaluate(() => {
2018-01-13 05:22:11 +00:00
return new Promise(resolve =>
window.$nuxt.$once('routeChanged', resolve)
).then(() => new Promise(resolve => setTimeout(resolve, 50)))
})
2018-01-13 05:22:11 +00:00
await page.evaluate(
($nuxt, path) => $nuxt.$router.push(path),
page.$nuxt,
path
)
if (waitEnd) await hook
return { hook }
2017-11-01 15:44:27 +00:00
},
routeData() {
2018-01-13 05:22:11 +00:00
return page.evaluate($nuxt => {
return {
path: $nuxt.$route.path,
query: $nuxt.$route.query
}
}, page.$nuxt)
},
2017-11-01 15:44:27 +00:00
loadingData() {
2018-01-13 05:22:11 +00:00
return page.evaluate($nuxt => $nuxt.$loading.$data, page.$nuxt)
2017-11-01 15:44:27 +00:00
},
2017-11-02 16:47:50 +00:00
errorData() {
2018-01-13 05:22:11 +00:00
return page.evaluate($nuxt => $nuxt.nuxt.err, page.$nuxt)
2017-11-02 16:47:50 +00:00
},
2017-11-02 17:07:33 +00:00
storeState() {
2018-01-13 05:22:11 +00:00
return page.evaluate($nuxt => $nuxt.$store.state, page.$nuxt)
2017-11-01 15:44:27 +00:00
}
}
return page
}