我是新来的 cypress .如有任何提示和帮助,我将不胜感激.我的测试是:

  1. 转到页面
  2. 解析来自服务器的响应
  3. 从回复中提取任何项目
  4. 然后,我想将该项目保存到一个对象中,以便稍后在测试中使用.
cy.wait('@pageLoaded').then(({ response }) => {
            expect(response.statusCode).to.equal(200);
            
            let i = randomItem();
            
            //Create an object
            const Item = {
                Id: response.body.items[i].id,
                IpuCode: response.body.items[i].ipuCode,
                Description: response.body.items[i].description,
                PackSize: response.body.items[i].packSize,
                PackType: response.body.items[i].packType,
            };
            
           //Here I'm getting the expected array
            cy.log(Item);
            
        })
        //And here I want to re-use it
        
        cy.addItemToShoppingCart(Item.value(IpuCode), pharmacyId, Item.value(Id), currentDateTime);


所以,我试着

cy.addItemToShoppingCart(Item.value(IpuCode), pharmacyId, Item.value(Id), currentDateTime);

TH结果:未定义项目

 cy.addItemToShoppingCart(Item.IpuCode, pharmacyId, Item.Id, currentDateTime);

结果:未定义项目

我也有工作的方法来获得价值并使用它

            cy.wait('@pageLoaded').then(({ response }) => {
                expect(response.statusCode).to.equal(200);
                
                let i = randomItem();
                let ItemGmsCode = response.body.items[i].gmsCode;
                cy.log(ItemGmsCode);
                cy.wrap(ItemGmsCode).as('itemGmsCode');
            })

但我不喜欢每次都这样,我必须将命令包装在一个块中

            cy.get('@itemGmsCode').then((gmsCode) => {
                //do soemthing
            })

还是我想要不可能的事?

推荐答案

在测试中保存数据的内置机制是您将在代码中使用的alias,如下所示

cy.wait('@pageLoaded').then(({ response }) => {
  ...
  cy.wrap({
    id: response.body.items[i].id,
    ipuCode: response.body.items[i].ipuCode,
    description: response.body.items[i].description,
    packSize: response.body.items[i].packSize,
    packType: response.body.items[i].packType,
  }.as('item')
})

// later in the same test

cy.get('@item').then(item => {
  cy.addItemToShoppingCart(item.ipuCode, pharmacyId, item.id, currentDateTime)
})

在Java脚本中,约定使用驼峰大小写,这意味着标识符的第一个字符是小写的.


作为脚注,别名还在由关键字this表示的测试范围上设置它的值.

要使用this,测试函数必须声明为function,而不是箭头函数() =>

例如

it('tests the shopping cart', function() {

  cy.wait('@pageLoaded').then(({ response }) => {
    ...
    // here alias is set in the same way
    cy.wrap({
      id: response.body.items[i].id,
      ipuCode: response.body.items[i].ipuCode,
      description: response.body.items[i].description,
      packSize: response.body.items[i].packSize,
      packType: response.body.items[i].packType,
    }.as('item')
  })

  // later in the same test

  // now you can access "this.item"
  cy.addItemToShoppingCart(this.item.ipuCode, pharmacyId, this.item.id, currentDateTime)

})

Javascript相关问答推荐

如何使用JavaScript向html元素添加样式

React状态变量在使用++前置更新时引发错误

在JavaScript中检索一些文本

如何在NightWatch.js测试中允许浏览器权限?

如何判断属于多个元素的属性是否具有多个值之一

zoom svg以适应圆

react/redux中的formData在expressjs中返回未定义的req.params.id

在我的html表单中的用户输入没有被传送到我的google表单中

如何在JavaScript文件中使用Json文件

无法读取未定义错误的属性路径名''

在open shadow—root中匹配时,使用jQuery删除一个封闭的div类

使用ThreeJ渲染的形状具有抖动/模糊的边缘

如何在Angular17 APP中全局设置AXIOS

使用领域Web SDK的Vite+Vue应用程序中的Web程序集(WASM)错误

如何发送从REST Api收到的PNG数据响应

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

面对代码中的错误作为前端与后端的集成

使用插件构建包含chart.js提供程序的Angular 库?

如何防止ionic 输入中的特殊字符.?

设置复选框根据选中状态输入选中值