使用 promise 延迟 mocha

Use promise to delay mocha

我正在使用 mocha and zombie
我的目标是从网站 <a> 标签加载数据,然后查询名称和 href。到目前为止这是有效的:

const Browser = require('zombie')

const browser = new Browser()

browser.visit('page', () => {
  let temp = browser.document.querySelectorAll('a selector')
  for (let i = 0; i < temp.length; i++) {
      browsers.push({ name: temp[i].innerHTML, url: temp[i].href })
  }
  delete temp
})

我的下一步是在测试中使用这些数据。

const data = [{ name: 'name', url: 'test' }]
describe('test with for', () => {
    for (let i = 0; i < data.length; i++) {
        it(data[i].name, () => {
            // test code with url of data[i]
        })
    }
})

我遇到的唯一问题是 data 数组是异步填充的,它必须在调用 it 函数时存在。

我尝试使用 before 但我发现它在这里没有意义(因为调用异步函数不会停止代码执行并且只有传入的函数可以依赖于异步数据) 所以我尝试使用 Promise 来做到这一点,但它也失败了。

const data = []
new Promise((resolve, reject) => {
    // filing data
    resolve()
}).then(() => {
    describe('...', () => {
        for (let i = 0; i < data.length; i++) {
          it (data[i].name, () => {})
        }
    })
})

我查看了 mocha 文档,但没有找到解决方案:/
我该如何解决这个问题?

好的,我找到了解决方案,问题是我的错误,我忘记删除了,在我的浏览器阅读中被包含,这就是 --delay 不起作用的原因。

运行代码:

const { describe, it } = require('mocha')
const { assert, expect } = chai = require('chai')
const Browser = require('zombie')

const browser = new Browser()
const browsers = []

new Promise((resolve, reject) => {
    browser.visit('site', () => {
        let temp = browser.document.querySelectorAll('selector')
        for (let i = 0; i < temp.length; i++) {
            browsers.push({ name: temp[i].innerHTML, url: temp[i].href })
        }
        delete temp
        resolve()
    })
}).then(() => {
    describe('Get browser name', () => {
        for (let i = 0; i < browsers.length; i++) {
          it(browsers[i].name, () => {

          })
        }
    })
    run()
})