#cypress
Вопрос:
Как я могу избежать пирамиды, когда делаю что-то вроде этого примера?
Cypress.Commands.add("test", () =gt; { // first request cy.request("POST", url1) .its("body") .then((response) =gt; { let userId = response.user._id // second request cy.request("POST", url2) .its("body") .then((response) =gt; { let adminAuth = response.accessToken // third request cy.request({ method: "POST", url: url headers: { "x-access-token": adminAuth }, body: { user: userId }
Я чувствую , что вложенность, подобная этой, внутри then (), совершенно недостаточна.
Ответ №1:
Я почти уверен, что ответ Алапана не сработает, так как вы не можете получить значение переменной cypress в том же продолжении, где оно было определено. Переменная просто не была вычислена в данный момент (она не синхронна). Так что вы можете пойти этим путем:
// first request cy.request("POST", url1) .its("body") .then((response) =gt; { cy.wrap(response.user._id).as('userId') }) // second request cy.request("POST", url2) .its("body") .then((response) =gt; { cy.wrap(response.accessToken).as('adminAuth') }) // accessing the variables inside a then block to let Cypress to compute them cy.wrap("").then(function() { // third request cy.request({ method: "POST", url: url, headers: { "x-access-token": this.adminAuth }, body: { user: this.userId } }) })
Ответ №2:
Вы можете создать псевдоним, чтобы сохранить значение, а затем получить к нему доступ с помощью this.
. Что-то вроде:
// first request cy.request("POST", url1) .its("body") .then((response) =gt; { cy.wrap(response.user._id).as('userId') }) // second request cy.request("POST", url2) .its("body") .then((response) =gt; { cy.wrap(response.accessToken).as('adminAuth') }) // third request cy.request({ method: "POST", url: url, headers: { "x-access-token": this.adminAuth }, body: { user: this.userId } })