【问题标题】:Mocha async hooks not running?摩卡异步钩子没有运行?
【发布时间】:2018-05-30 03:37:53
【问题描述】:

我总是在这个结构中得到未定义的页面。似乎 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
        }
    })
})

【问题讨论】:

  • 您正在describe 中写入控制台,请尝试在it 中写入。
  • 我忘记了第二个描述中的before,它做了一些工作,然后运行了一些it 语句。
  • 遗憾的是执行顺序是这样的gist.github.com/harto/c97d2fc9d0bfaf20706eb2acbf48c908
  • 我认为你可以使用 selenium-js,它有一些很好的异步 Mocha 示例/API。

标签: javascript node.js async-await mocha.js puppeteer


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2021-02-15
    • 2012-08-07
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2016-06-10
    相关资源
    最近更新 更多