我们可以从 Cypress 中的另一个测试用例中调用一个测试用例吗?

问题描述 投票:0回答:1

我正在使用 Cypress 和 JavaScript 进行自动化测试。

我必须管理一个用于添加、搜索和编辑用户的测试用例。我为每个创建了不同的测试用例。添加用户后,我通过搜索验证了最近创建的用户。我之前也搜索过相同的用户来编辑它。

在 Cypress 中,测试用例按顺序运行。我的第一个案例是“添加用户”,第二个案例是“搜索用户”,最后一个案例是“编辑用户”。添加后自动执行搜索操作。但在编辑之前,我必须调用“搜索”测试用例中使用的所有函数。我使用的是POM框架。

这是我写的代码:

describe('User management', function(){
    it('Add user', function(){
        obj.clickOnAddUserButton()
        obj.fillDetails()
        obj.clickOnSaveButton()
    })
    it('Search user', function(){
        obj.searchName()
        obj.searchRole()
        obj.verifyName()
        obj.verifyRole()
    })
    it('Edit user', function(){
        obj.searchName()
        obj.searchRole()
        obj.verifyName()
        obj.verifyRole()
        obj.editUser()
    })
})

是否可以从另一个

it()
调用
it()
,就像我们调用的函数一样?

我尝试了以下解决方案来理解,但失败了:Cypress - 让 1 个测试调用另一个测试并运行它

我还浏览了以下链接,但这对我没有帮助: 如何在Protractor中调用其他测试用例中的公共测试用例

让我举个例子,我到底想要什么。

describe('User management', function(){
    it('Add user', function(){
        obj.clickOnAddUserButton()
        obj.fillDetails()
        obj.clickOnSaveButton()
    })
    it('Search user', function(){
        obj.searchName()
        obj.searchRole()
        obj.verifyName()
        obj.verifyRole()
    })
    it('Edit user', function(){
        //Here I want to call it() instead of calling same functions here
        //i.e. it('Search user')
        obj.editUser()
    })
})
javascript cypress pageobjects
1个回答
0
投票

您可以重新排列已有的代码。

一般的测试模式是

it('test-name', callbackFunction)

你不能嵌套

it()
,因为 Cypress 运行程序需要管理这些功能,例如重试和报告结果。

但是您可以移动

callbackFunction
以使其可重复使用。

describe('User management', function(){
  it('Add user', function(){
    obj.clickOnAddUserButton()
    obj.fillDetails()
    obj.clickOnSaveButton()
  })

  function searchUser() {
    obj.searchName()
    obj.searchRole()
    obj.verifyName()
    obj.verifyRole()
  }

  it('Search user', searchUser())

  it('Edit user', function(){
    searchUser()
    obj.editUser()
  })
})

在页面对象本身内部编写

searchUser()
函数会更整洁

class User {

  searchName() {...}
  searchRole() {...}
  verifyName() {...}
  verifyRole() {...}

  searchUser() {
    this.searchName()
    this.searchRole()
    this.verifyName()
    this.verifyRole()
  }
}
describe('User management', function(){
  it('Add user', function(){
    obj.clickOnAddUserButton()
    obj.fillDetails()
    obj.clickOnSaveButton()
  })

  it('Search user', () => {
    obj.searchUser()
  })

  it('Edit user', function(){
    obj.searchUser()
    obj.editUser()
  })
})

或者再一个抽象,组成一个

UserWorkflow
页面对象

class User {
  searchName() {...}
  searchRole() {...}
  verifyName() {...}
  verifyRole() {...}
}

class UserWorkflow {

  // Various User workflows to use in tests

  constructor() {
    this.user = new User()
  }

  searchUser() {
    this.user.searchName()
    this.user.searchRole()
    this.user.verifyName()
    this.user.verifyRole()
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.