Сценарий: Мы хотим проверить E2E расчет цены нашего интернет-магазина (продажи товаров по индивидуальному заказу).Поэтому мы настраиваем продукт в интерфейсе пользователя и проверяем цену на различных этапах (страница продукта, корзина, оформление заказа и т. Д.).Когда заказ размещен, пользователь перенаправляется на страницу успеха, на которой также отображается номер заказа.
После размещения заказа мы также хотим проверить цену в бэкэнде продавца на основе номера заказа, который мы получили отстраница успеха
Таким образом, мы хотим как-то сохранить номер oder для последующего использования в бэкэнде.
Мы хотим протестировать все это в одном тестовом примере - хотя мы знаем, что рекомендуется тестироватьпо крайней мере, интерфейс и бэкэнд в отдельных тестовых случаях.
Проблема:
Следующий код работает нормально:
describe('Check prices on frontend and backend', () => {
it("can calculate correct prices on frontend and backend", function(){
cy.visit("https://www.example.com/product/")
...
// on success-page
cy.get('#ordernumber').invoke("text").as("orderNumber");
// go to backend
cy.visit('https://www.example.com/backend')
...
cy.get('#order_table #ordernumberInput').then(($orderInput) => {
this.orderNumber = this.orderNumber.trim()
cy.wrap($orderInput).type(this.orderNumber)
})
...
})
})
Но как только мыинкапсулировать некоторый код в функцию, он перестает работать с «this.orderNumber не определен»
describe('Check prices on frontend and backend', () => {
it("can calculate correct prices on frontend and backend", function(){
cy.visit("https://www.example.com/product/")
...
// on success-page
cy.get('#ordernumber').invoke("text").as("orderNumber");
// go to backend
cy.visit('https://www.example.com/backend')
...
function accessOrder() {
...
cy.get('#order_table #ordernumberInput').then(($orderInput) => {
this.orderNumber = this.orderNumber.trim()
cy.wrap($orderInput).type(this.orderNumber)
})
...
}
accessOrder();
...
})
})
Вопросы:
1) Как это исправить?
2) Есть ли другое лучшее решение для этого?
Спасибо!