如何在Cypress中的API调用中将变量用作参数

时间:2019-11-07 22:30:06

标签: javascript automation cypress

我正在从API调用中捕获一个值并将其设置为变量。我现在想在第二个API调用中将该变量用作URL参数。对于很多人来说,这可能是非常简单的,但是我只是开始学习JavaScript,而我正在阅读和尝试的所有内容都不适合我。非常感谢您能提供的任何帮助,如果您愿意,我很乐意补充细节!

1 个答案:

答案 0 :(得分:0)

这个问题已经被回答过很多次了(我给了至少两个类似的答案herehere)。

您基本上可以做两件事:

  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}`);
        });
    });
    

    或(通过赛普拉斯的.as()抽象使用mocha上下文):

    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}`);
        });
    });