使用setupFiles运行异步代码

时间:2019-01-15 23:03:09

标签: node.js unit-testing asynchronous jestjs

在下载和执行测试之前,如何运行setupFiles数组中的文件以首先完成,以及如何在测试中从setupFiles代码中迭代值。

setupFiles代码中的数据已分配给全局对象,并且发生了两件事。 1.测试套件与setupFiles代码一起立即运行。 2.在测试代码中无法访问这些值,因为它们是未定义的,但是如果将它们嵌套在另一个describe块中,它们将变为可访问的,但仍然无法遍历它们以对其进行测试。

我尝试通过设置和拆除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能够异步运行,并且可以迭代这些值。

1 个答案:

答案 0 :(得分:0)

Jest does not support this type of workflow, I accomplished this by launching the code prior to Jest and preparing the data I needed in a file, using fs.writeStream().