【问题标题】:using setupFiles to run asynchronous code使用 setupFiles 运行异步代码
【发布时间】:2019-06-10 00:14:52
【问题描述】:

如何在下载和执行测试之前先运行 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 异步运行,并且可以迭代这些值。

【问题讨论】:

  • 有什么理由不只是在workflow.test.js 中的index.js 中调用asnyc 函数吗?那么你就不需要使用global,因为数据对于你的测试来说是本地的,并且将async函数传递给beforeAll意味着Jest将在运行测试之前等待它完成。
  • 这是我尝试的第一件事,异步调用完成时数据不可用。 @brian-lives-outdoors

标签: node.js unit-testing asynchronous jestjs


【解决方案1】:

Jest 不支持这种类型的工作流,我通过在 Jest 之前启动代码并使用 fs.writeStream() 在文件中准备我需要的数据来实现这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多