【发布时间】:2017-08-01 21:16:40
【问题描述】:
我正在使用mocha 和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 文档并没有找到解决方案:/
我该如何解决这个问题?
【问题讨论】:
标签: javascript unit-testing asynchronous mocha.js zombie.js