You need to enable JavaScript to run this app. Cypress中使用this.*访问fixture别名时报无法读取SOAP_body属性的错误
优惠活动
大模型
产品
解决方案
定价
更多

Cypress中使用this.*访问fixture别名时报无法读取SOAP_body属性的错误

问题根源

你遇到的报错是this本身为undefined导致的,和fixture加载、自定义task逻辑无关,核心原因是违反了Cypress/Mocha对this上下文绑定的规则:

  • 当你需要用this.*访问别名时,所有关联的回调(包括describe、beforeEach、it)都必须使用传统函数表达式,不能用箭头函数。
  • 箭头函数会继承外层词法作用域的this,无法被Cypress/Mocha绑定到正确的测试上下文对象,最终导致访问this.SOAP_body时,this本身已经是undefined。

对照你的代码来看:

  • describe("SOAP API Test", () => { ... }) 用了箭头函数
  • beforeEach(() => { ... }) 用了箭头函数
  • 只有it的回调用了普通函数,完全不符合绑定要求。
修正方案

把所有涉及this上下文的回调改成传统函数表达式即可:

/// <reference types="cypress"/>

describe("SOAP API Test", function () { // 改为普通函数
    beforeEach(function () { // 改为普通函数
        cy.fixture("SOAP_body.xml").as("SOAP_body");
    });

    it("Test with task", function () {
        const body = this.SOAP_body; // 此时this已正确绑定,可正常获取fixture值

        cy.request({
            method: "POST",
            headers: {
                "content-type": "text/xml; charset=utf-8",
                Authorization: "Token myVerySecretToken",
                SOAPAction: "http://tempuri.org/TrackingFull",
            },
            url: `https://path.of/the/application.asmx`,
            body: body,
            failOnStatusCode: false,
        }).then((result) => {
            expect(result.status).to.equal(200);
            cy.task("XMLtoJSON", result.body).then((response) => {
                expect(
                    response.elements[0].elements[1].elements[0].elements[0]
                        .elements[1].elements[0].elements[0].elements[0]
                        .elements[0].elements[0].text
                ).to.equal("something");
            });
        });
    });
});
补充说明
  • cy.get('@别名') 方式可以正常运行,是因为它直接从Cypress内部维护的别名存储取值,完全不依赖this的绑定。
  • 只要你选择用this.*访问别名,所有对应的describe、hook、it回调都不能用箭头函数,哪怕只有一个环节用了箭头函数,都可能导致this绑定异常。

内容的提问来源于stack exchange,提问作者As Aves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 00:36:10