首页 > 解决方案 > 摩卡异步钩子没有运行?

问题描述

我总是在这个结构中得到未定义的页面。似乎 mocha 的钩子都没有运行。我尝试添加async到顶级描述,我尝试添加完成语句。我什至尝试使用Promise.then.catch. 一切都没有运气。

const should = require('chai').should()
const puppeteer = require('puppeteer')

const puppeteerConfig = {
    headless: true,
    args: ['--no-sandbox', '--disable-translate', '--disable-extensions', '--disable-sync']
}

var browser
var page

describe('...', function() {

    before(async function() {
        browser = await puppeteer.launch(puppeteerConfig)
    })

    after(async function() {
        await browser.close()
    })

    beforeEach(async function() {
        page = await browser.newPage()
    })

    afterEach(async function() {
        await page.close()
    })

    describe('...', async function() {
        before(async function() {
            console.log(page) // undefined
        }
    })
})

标签: javascriptnode.jsasync-awaitmocha.jspuppeteer

解决方案


感谢@Akshendra Pratap,该要点说明了之前失败的原因。我所做的是创建一个顶级函数:

async function genHTML(page) {
    return await page.$(...)
}

然后在第一个 describe's 中调用它beforeEach()。这解决了它,非常奇怪的设计,摩卡会先调用鞋面然后再调用之前的下,然后调用鞋面 beforeEach ......


推荐阅读