Cypress中如何根据Fixture值返回数据?调用方法获undefined
问题分析与解决方法
问题根源
cy.fixture是Cypress的异步命令,你的getTestEnv方法仅在.then()回调里返回了test,但方法本身没有返回这个异步操作的Promise链。当你在getDetails里同步赋值let env = this.getTestEnv()时,异步操作还未完成,自然拿到的是undefined。
修复方案
1. 修改Class A的getTestEnv方法,返回异步操作的Promise
让方法直接返回cy.fixture()的调用结果,外部就能通过.then()获取最终的test值:
Class A: getTestEnv() { return cy.fixture("Properties/env.json").then((profile) => { const df = profile.test_env; let test; if (df.match(/d\d+/)) { test = `random.${df}.test.com`; } else { test = `random.${df}.autotest.com`; } return test; }); }
2. 在Class B的getDetails方法中通过.then()获取异步结果
getTestEnv现在返回的是Promise,需要用.then()接收最终值:
Class B: getDetails() { this.getTestEnv().then(env => { cy.log("env: " + env); // 现在能拿到正确的env值 }); }
补充说明
Cypress的所有命令都是异步的,遵循自身的命令队列机制。不要用同步赋值的方式获取异步命令的结果,必须通过链式调用(.then())或者结合async/await(需在Cypress支持的异步上下文里使用)来处理。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

