将 .then 的内容分离到 Cypress 中的新函数

Kir*_*Lyn 0 typescript cypress

我有一个功能:

let animal: {
    animalObj: {
        name: string;
        randomInfo: string[]
    }
} = {
    animalObj: {
        name: '',
        randomInfo: ['']
    }
}

cy.request({
    method: 'POST',
    url: '/api/animal',
    body: animal
}).then($el => {
    animal.animalObj = $el.body.Order

    animal.animalObj.name = 'Rex'
    animal.animalObj.randomInfo = ["Likes to bark!"]
})
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想为最后两行创建一个新的自定义命令:

    animal.animalObj.name = 'Rex'
    animal.animalObj.randomInfo = ["Likes to bark!"]
Run Code Online (Sandbox Code Playgroud)

它需要一个 string 和 string[] ,同时将这两个值分配给namerandomInfo。这样,我只需要调用该自定义命令并提供 2 个动态值。

Poo*_*dle 5

后面的自定义命令cy.request()是“子”命令。

它有一个特殊的参数{prevSubject:true}来传递请求响应。

Cypress.Commands.add('setAnimal', {prevSubject:true}, ($response, name, randomInfo) => {
  const animal = {}
  animal.animalObj = $response.body.Order || {}
  animal.animalObj['name'] = name 
  animal.animalObj['randomInfo'] = randomInfo 
  return cy.wrap(animal)
})


cy.request({
  method: 'POST',
  url: '/api/animal',
  body: animal
})
.setAnimal('Rex', ["Likes to bark!"])  // response is passed automatically
.as('animal')

// later

cy.get('@animal')
  .then(animal => {
    expect(animal.animalObj.name).to.eq('Rex')
  })
})
Run Code Online (Sandbox Code Playgroud)