Как использовать переменную в качестве параметра в вызове API в Cypress - PullRequest
0 голосов
/ 08 ноября 2019

Я получаю значение из вызова API и установил его в переменную. Теперь я хотел бы использовать эту переменную в качестве параметра URL во втором вызове API. Вероятно, это очень просто для многих, но я только начинаю изучать javascript, и все, что я читаю и пытаюсь, не работает для меня. Буду признателен за любую помощь, которую вы можете предложить, и я рад добавить детали, если хотите!

1 Ответ

0 голосов
/ 08 ноября 2019

На это уже много раз отвечали (я дал по крайней мере два похожих ответа здесь и здесь ).

Вы можете сделать две вещи:

  1. вложите команды:

    it('test', function () {
        cy.request().then( resp => {
            return cy.visit(`/path/${response.body}`);
        });
    });
    
  2. или, если вам не нравится ад обратного вызова, существует множество шаблонов. Вот три из них:

    (обратите внимание, что в следующих примерах вы ничего не получаете в отличие от вложения, как показано выше, потому что все эти примеры вкладываются как минимум один раз. Но эти шаблоны все же могут быть предпочтительнее в случае, если вынеобходимо вложить несколько раз, или если вам понадобится повторно использовать переменную гораздо позже в тесте, и вы не хотите помещать все команды в первый обратный вызов).

    it('test', function () {
        let value;
        cy.request().then( resp => {
            value = response.body;
        });
        cy.then(() => {
            return cy.visit(`/path/${value}`);
        });
    });
    

    или(с использованием контекста mocha через абстракцию Cypress '.as()):

    it('test', function () {
        let value;
        cy.request().then( resp => {
            cy.wrap(response.body).as('value');
        });
        cy.get('@value').then( value => {
            return cy.visit(`/path/${value}`);
        });
    });
    

    или (с использованием контекста mocha напрямую):

    it('test', function () {
        cy.request().then( resp => {
            // store as mocha context
            // (note: in this pattern it's important the test case function is
            //  regular, non-arrow function; and the callback passed to `.then`
            //  is an arrow function so that you have access to parent
            //  lexical context via `this`)
            this.value = response.body;
        });
        cy.then(() => {
            return cy.visit(`/path/${this.value}`);
        });
    });
    
...