Estoy probando una herramienta de cotización muy compleja en la que necesito probar el precio de margen de descuento y el precio de descuento. Digamos que el precio en el catálogo es 100 $ y un socio obtiene un 25 % de descuento, entonces el precio del socio es 75 $
¿Debería probar así -> cy.get(partnerPriceField)/should('have.value', 75)
O -> cy.get(partner PriceField)/should('have.value', catalogPrice * (1-discount/100))
cy.get(partnerPriceField).should('have.value', 75)
para las pruebas e2e.
El trabajo de probar el cálculo recae en las pruebas unitarias , que están cerca del código fuente, por lo que la prueba se puede cambiar si/cuando cambia el cálculo de src.
El trabajo de la prueba e2e es asegurarse de que, dados algunos datos de entrada, la página muestre los datos de salida (recuadro negro).
Preferiblemente, la entrada y la salida se suministran en una tabla de accesorios que se ajusta fácilmente cuando se revisa el cálculo.
Puede pasar una expresión regular con .contains()
y seguida de una afirmación para verificar que el valor sea visible.
const fullPrice = 100 const discount = .25 const discountPrice = fullPrice * discount const regexMatcher = new RegExp(`$${discountPrice}`) // equals /\$75/ cy.contains('.selector-containing-price-text', regexMatcher) .should('be.visible')
Te sugiero que vayas con la segunda opción porque en ese caso si en el futuro cambia el catalog price
o el discount value
, no tienes que cambiar la lógica porque es genérica. Habiendo dicho eso, para que funcione la segunda opción, primero debe cambiar el precio del catálogo y el descuento a números, luego, después del cálculo, debe convertir la respuesta final en una cadena y luego hacer la afirmación final, algo como esto:
cy.get('partner PriceField').should( 'have.value', (+catalogPrice * (1 - +discount / 100)).toString() )
Así es como se ve tu cálculo:
Además, en caso de que su catalogPrice sea de 100$
y el descuento sea 25%
, simplemente agregue .replace(/\D/g,'')
para eliminar % y $. Entonces, en este caso, su afirmación se verá así:
cy.get('partner PriceField').should( 'have.value', ( +catalogPrice.replace(/\D/g, '') * (1 - +discount.replace(/\D/g, '') / 100) ).toString() )
Su cálculo se vería así: