Cypress测试中如何全局使用fixture文件数据并避免调用报错
Cypress fixture数据访问报错解决方案
问题核心原因
报错本质是fixture异步加载的作用域问题:fixture加载是异步操作,若你将加载到的数据赋值给局部变量,测试用例执行时局部变量已经失效;或是你使用了箭头函数,导致无法访问Cypress的测试上下文。
具体解决方法
方案1:通过测试上下文this挂载数据
注意不要使用箭头函数,箭头函数没有独立的this指向,无法绑定Cypress测试上下文:
// beforeEach中加载fixture beforeEach(function() { cy.fixture('comptes_qualifs').then(function(fixtureData) { // 将fixture数据挂载到测试上下文this上 this.comptesData = fixtureData }) }) // 测试用例中访问 it('测试登录逻辑', function() { // 直接从this读取fixture数据 cy.get('#login').type(this.comptesData.compte_i.login) })
方案2:使用Cypress别名机制
你也可以用as()给fixture设置别名,后续通过this访问即可:
beforeEach(() => { // 给fixture设置别名 cy.fixture('comptes_qualifs').as('comptesData') }) it('测试登录逻辑', function() { // 访问别名对应的fixture数据 cy.get('#login').type(this.comptesData.compte_i.login) })
全局复用优化
如果你需要在所有测试用例文件中都使用该fixture,可以将加载逻辑写入cypress/support/e2e.js文件,无需每个测试文件单独配置beforeEach。
内容的提问来源于stack exchange,提问作者Christophe Henry
相关产品推荐
相关产品推荐

