我正在从API调用中捕获一个值并将其设置为变量。我现在想在第二个API调用中将该变量用作URL参数。对于很多人来说,这可能是非常简单的,但是我只是开始学习JavaScript,而我正在阅读和尝试的所有内容都不适合我。非常感谢您能提供的任何帮助,如果您愿意,我很乐意补充细节!
答案 0 :(得分:0)
这个问题已经被回答过很多次了(我给了至少两个类似的答案here和here)。
您基本上可以做两件事:
嵌套命令:
it('test', function () {
cy.request().then( resp => {
return cy.visit(`/path/${response.body}`);
});
});
或者,如果您不喜欢回调地狱,则有很多模式。这是三个:
(请注意,在以下示例中,您不会像上图所示的嵌套那样获得任何东西,因为所有这些示例至少嵌套一次。但是在您需要嵌套更多的情况下,这些模式仍然是可取的不止一次,或者如果您需要在测试的稍后阶段重用变量,并且不想将所有命令都放入第一个回调中。
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}`);
});
});