【问题标题】:Cypress: extract value from JSON body to a variable赛普拉斯:从 JSON 正文中提取值到变量
【发布时间】:2021-12-02 22:19:03
【问题描述】:

我正在使用 cypress.io 测试 API(使用 Node.js 创建)。我想从 API 的 JSON 响应中提取值并将其保存到变量中。

我尝试了以下链接中提到的解决方案,但它不起作用: Cypress - get value from json response body

下面是我用来测试 API 的代码:

/// <reference types="cypress" />
describe("Testing Provider Catalog API", () => {
    it("Provider Catalog API GET Request", () => {
        cy.request('GET', 'v1/providers')
            .then((response) => {
                expect(response).to.have.property('status', 200)
                expect(response.body).to.not.be.null
                // expect(response.body.providers).to.have.length(1)
            })
        cy.screenshot()
    })
    it("Provider Catalog API POST Request", () => {
        const provider = {
            "type": "loadboard",
            "name": "123loadboard"
        };
        cy.request('POST', 'v1/providers', provider)
        cy.screenshot()
    })
    it("Provider Catalog API PUT Request", () => {
        const provider = {
            "type": "loadboard",
            "name": "123loadboard"
        };
        cy.request('PUT', 'v1/providers/61a54a66a2b734859481931c', provider)
        cy.screenshot()
    })
    it("Provider Catalog API DELETE Request", () => {
        cy.request('DELETE', 'v1/providers/61a68e7ca6011e605029191b')
        cy.screenshot()
    })
})

下面是我正在使用的代码

       var providerId
        cy.wait('@newObject').then((response) => {
            expect(response.status).to.eq(201)
            expect(response.responseBody).to.have.property('_id')
            const body = (response.responseBody)
            providerId = body['_id']
        })
        cy.get(someInput).type(newId)

API 的示例输出:

{
"_id":"61a54ba1a2b7348594819323",
"type":"loadboard",
"name":"123loadboard",
"__v":0
}

我想将 _id 的值存储在一个变量中,以便以后使用。最近几天我一直在尝试,但似乎没有任何效果。谁能帮帮我吗。提前致谢。

【问题讨论】:

    标签: javascript node.js cypress cypress-testing-library


    【解决方案1】:

    在 cypress 中使用变量的推荐方法是使用别名。请参阅文档here

    在您的代码中,您可以wrap() 您的_id 并将其另存为别名,然后在代码中的其他位置调用您的别名:

    cy.wait('@newObject').then((response) => {
        expect(response.status).to.eq(201)
        expect(response.responseBody).to.have.property('_id')
        cy.wrap(response.responseBody._id).as('newId')
    })
    // then later in your code use:
    cy.get('@newId').then((newId) => {
        cy.get(someInput).type(newId)
    })
    

    您也可以在您的wait()type() 您的_id

    cy.wait('@newObject').then((response) => {
        expect(response.status).to.eq(201)
        expect(response.responseBody).to.have.property('_id')
        cy.get(someInput).type(response.responseBody._id)
    })
    

    或者您可以使用 cypress 全局环境对象 Cypress.env()。请参阅文档here

    cy.wait('@newObject').then((response) => {
        expect(response.status).to.eq(201)
        expect(response.responseBody).to.have.property('_id')
        Cypress.env('newId', response.responseBody._id)
    })
    // then later in your code use:
    cy.get(someInput).type(Cypress.env('newId'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2019-12-12
      • 2022-11-17
      • 1970-01-01
      • 2022-07-22
      • 2017-01-28
      • 1970-01-01
      相关资源
      最近更新 更多