是否可以在不同的前提条件下运行相同的testcafe夹具

Rem*_*emy 4 testing automated-tests web-testing e2e-testing testcafe

有人可以使用testcafe(fixtureEach)找到最合适的方法来运行具有不同前提条件的相同夹具的最佳方法吗?

鉴于我有以下固定装置:

  fixture('[Test] My Page')
  .meta({ env: 'aat', mobile: 'true', author: 'me' })
  .beforeEach(async t => {
    await t.navigateTo(myPage.url)
    await waitForReact(10000)
  })

test('Page should load all data successfully', async t => {
  const { Query: queries } = await t.ctx.graphQLTools.mockManagementClient.getCalls()
  for (const q of Object.keys(queries)) {
    for (const { args, context } of Object.keys(queries[q])) {
      await t.expect(queries[q][args]).typeOf('undefined')
      await t.expect(queries[q][context]).typeOf('undefined')
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

在上面的代码示例中,我需要多次运行此测试:

  1. 我是匿名用户
  2. 我是管理员用户
  3. 我是默认用户

我已经尝试了以下代码,但是当我在夹具中进行多个测试需要检查时,它看起来很麻烦,并且会带来复杂性(摘自https://testcafe-discuss.devexpress.com/t/multiple-用不同的数据执行一次测试/ 219):

const a = ['anonymous', 'logged In']
for (const user of a) {
  test.meta({ wip: 'true' })(`Page should load all data successfully for ${user} user`, async t => {
    if (R.equals('logged In', user)) {
      await helpers.setCookie({ key: 'access_token', value: '123123123' })
      await helpers.reloadPage()
    }

    const { Query: queries } = await t.ctx.graphQLTools.mockManagementClient.getCalls()

    await t.expect(helpers.isEqlToEmptyQuery(queries.basket)).eql(true)
    await t.expect(helpers.isEqlToEmptyQuery(queries.categories)).eql(true)

    if (R.equals('logged In', user)) {
      await t.expect(helpers.isEqlToEmptyQuery(queries.customer)).eql(true)
    }
  })
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使整个灯具使用不同的beforeEach每个灯具挂钩运行2-3次?

hdo*_*val 5

一种简单的解决方案是在以下位置添加三个npm脚本package.json

"test": "testcafe chrome <all testcafe options>"
"test-anonymous": "npm test -- --user=anonymous"
"test-admin": "npm test -- --user=admin"
"test-default": "npm test -- --user=default"
Run Code Online (Sandbox Code Playgroud)

然后beforeEach按照我在Testcafe-测试用例外部的测试命令行参数中所解释的方式阅读此自定义命令行选项