使用承诺延迟摩卡

时间:2017-03-11 15:14:54

标签: javascript unit-testing asynchronous mocha zombie.js

我正在使用mochazombie 我的目标是从网站上的网站<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文档并找不到解决方案:/
我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案,问题是我的错误,我忘记删除描述inwith我的浏览器阅读包含了为什么--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()
})