在赛普拉斯测试中访问“ it”功能之外的夹具数据

时间:2019-11-18 18:35:51

标签: javascript testing integration-testing cypress

鉴于来自固定装置(在Cypress中使用数据的正确方法)或其他地方的数据,我想以编程方式编写一系列 <svg height="150" width="150"> <defs> <radialGradient id="grad1" cx="80%" cy="20%" r="100%" fx="100%" fy="50%"> <stop offset="0%" style="stop-color:rgb(0,0,255);stop-opacity:1" /> <stop offset="100%" style="stop-color:rgb(0,200,255);stop-opacity:1" /> </radialGradient> </defs> <ellipse cx="100" cy="100" rx="30" ry="30" stroke="url(#grad1)" stroke-width="10" fill="none" stroke-linecap="round" stroke-dasharray="1000" stroke-dashoffset="840"/> </svg 测试。

此数据是一个对象数组,每个对象提供我想编写的每个it()测试所需的必要信息。

it()

下面是我要实现的目标的想法

[
  {
    slug: "/some-page-with-form/",
    slugRedir: "/expected-redir-page-after-form-submit/",
    formData: [
      {
        htmlName: "firstName",
        type: "inputText",
      },
      ...
    ]
  },
  ...
]

显然,以上操作无效,因为describe("CMS-generated pages with forms", function() { before(function() { cy.fixture("forms").as("forms") }); this.forms.forEach(({ slug, slugRedir, formData }) => { it(`fills and submits form on ${slug}`, function() { ... }); }) }) this.forms范围之外undefined

总结-给定来自灯具或可能导入到其他位置的数据,我将如何以编程方式编写一系列it()测试?

2 个答案:

答案 0 :(得分:0)

我不建议您这样做。您实质上是在尝试自动生成测试,我可以理解这种冲动,但我建议您花点时间编写测试。这将使您有机会询问您要测试的内容,是否真的需要测试以及结果的含义。

如果您确实认为这是明智的选择,则始终可以对以下形式进行全面测试:

it(`fills and submits forms', function () {
  this.forms.forEach(({ ... }) => {
    // assertions
  })
})

要回答最初的问题,您还可以通过导入数据使数据可用:

import forms from '../fixtures/forms.json'

// ...

  forms.forEach(...)

答案 1 :(得分:0)

您很接近,you can't use arrow functions and this in the same spec,您可以转换为非箭头功能,也可以尝试其中一种。

编辑:删除了我的解决方案。发布类似的解决方案后,我发现此问题已在以下柏树问题中得到解答:https://github.com/cypress-io/cypress/issues/3963#issuecomment-483581934