node.js - 使用 setupFiles 运行异步代码
问题描述
如何在下载和执行测试之前运行 setupFiles 数组中的文件以首先完成,以及如何在测试中迭代 setupFiles 代码中的值。
setupFiles 代码中的数据被分配给全局对象,并且发生了两件事。1. 测试套件使用 setupFiles 代码立即运行。2. 这些值在测试代码中不可访问,因为它们是未定义的,但如果我将它们嵌套在另一个描述块中,它们变得可访问,但我仍然无法循环通过它们来运行测试。
我尝试通过设置和拆除 beforeAll 并添加计时器来设置值。
index.js
(async () => {
const events = [
'dialog',
'request',
'response'
]
const browser = await puppeteer.launch({ headless: false })
const page = await browser.newPage()
events.forEach(event =>{
page.on(event, async(eventType) =>{
if(event === 'dialog') {
return eventType.accept()
}
else if(event === 'response') {
if(eventType.url().includes('trending')) {
let data = await eventType.json().then(res => res).catch(e => console.error(e.message))
global.data = data
}
}
else {
console.log('ಠ_ಠ ¯\_(ツ)_/¯ Nothing To See here ¯\_(ツ)_/¯ಠ_ಠ')
}
})
})
await page.setViewport({ width: 1280, height: 1307 })
await page.goto('https://www.giphy.com/')
await browser.close()
})()
workflow.test.js
describe('giphy', () =>{
beforeAll(async() =>{
console.log(global.data)
})
global.data.forEach(element =>{
it('wants to show up', async() =>{
await expect(element).toHaveProperty('title')
})
})
})
package.json
"jest": {
"verbose": true,
"setupFiles": ["<rootDir>/index.js"]
},
我希望 setupFiles 异步运行,并且可以迭代这些值。
解决方案
Jest 不支持这种类型的工作流,我通过在 Jest 之前启动代码并使用 fs.writeStream() 在文件中准备我需要的数据来实现这一点。
推荐阅读
- excel - 以二进制模式将十六进制字符串写入文件
- c# - 使用 C# 正则表达式匹配但排除字符串
- db2 - DB2 - 字符串匹配内连接
- java - 流排序问题
- vue.js - 从 v-autocomplete 获取完整的 Vuetify 项目
- sql - SQL中的东西查询
- javascript - 在 animateCC 上的 createJS 中使用按钮键入文本
- javascript - 两个 html 时间输入之间的差异
- python - 有没有办法将命名函数参数转换为 dict
- php - 警告:preg_replace():不再支持 /e 修饰符,请在 /home/ 中使用 preg_replace_callback