我如何使用赛普拉斯端到端测试测试来自 GA4 事件的一篇文章的不同价格

how can i test different prices for one article from GA4 event with Cypress end2end testing

我正在尝试测试 GA4 是否跟踪了正确的数据。但是,我遇到的问题是,一篇文章根据是在集成环境还是在生产环境播放,可以有多个价格。

getCorrectPrice 命令:

Cypress.Commands.add('getCorrectPrice', () => {
    cy.url().then(url => {
        const currentURL = url.split('/de/');
        const pathURL = currentURL[0];
        if(pathURL === environment.production)
        {
            return productData.product.trackedPrice.production
        } else {
            return productData.product.trackedPrice.integration
        }
    })
})

测试:

it.only('should track add to cart on product detail page', function() {
        //data
        const expectedAddToCartEvent = {
            event: 'add_to_cart',
            ecommerce: {
                items: [
                    {
                        item_id: '000000',
                        item_name: 'product',
                        currency: 'EUR',
                        item_brand: 'goodbrand',
                        item_category: 'some Category',
                        item_category2: 'some Category 2',
                        price: cy.getCorrectPrice().then((price) => {
                            return price
                        }),
                        quantity: 1,
                    },
                ],
            },
        }

        //arrange
        cy.visitWithBasicAuth(routes.productDetail)
        
        //act
        cy.get(selectors.resultList.addToCartButton).eq(1).click({ force: true })
        
        //assert
        cy.wait('@addProduct').then(() => {
            cy.getSpecificEventFromDataLayer('add_to_cart').then(
                (actualAddToCartEvent) => {
                    cy.wrap(actualAddToCartEvent, { timeout: 0}).should(
                        spok(expectedAddToCartEvent),
                    )
                }
            )
        })
    })

我的问题是,如果我在 expectedAddToCartEvent 的控制台中显示价格,我会得到正确的价格。但是,当测试运行时,出现以下错误消息:

我已经尝试使用 cy.wait 和 .then 但它不起作用

问题是 cy.getCorrectPrice() returns 您无法将 Chainable 值分配给价格 属性。

试试这个结构

it('should track add to cart on product detail page', function() {

  cy.getCorrectPrice().then(correctPrice => {

    const expectedAddToCartEvent = {
      event: 'add_to_cart',
      ecommerce: {
        items: [
          {
            item_id: '000000',
            item_name: 'product',
            currency: 'EUR',
            item_brand: 'goodbrand',
            item_category: 'some Category',
            item_category2: 'some Category 2',
            price: correctPrice,
            quantity: 1,
          },
        ],
      },
    }

    //arrange
    cy.visitWithBasicAuth(routes.productDetail)
        
    //act
    cy.get(selectors.resultList.addToCartButton).eq(1).click({ force: true })
        
    //assert
    cy.wait('@addProduct').then(() => {
      cy.getSpecificEventFromDataLayer('add_to_cart')
        .then((actualAddToCartEvent) => {
          cy.wrap(actualAddToCartEvent, { timeout: 0})
            .should(spok(expectedAddToCartEvent))
        })
    })
  })
})