我如何使用赛普拉斯端到端测试测试来自 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))
})
})
})
})
我正在尝试测试 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))
})
})
})
})