Cypress-тест, возвращающий «TypeError: Невозможно прочитать свойство 'should' of undefined» при попытке вызвать метод в том же классе объекта страницы с помощью this. - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть следующий тестовый класс в cypress / интеграции / todo-actions.spe c. js,

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

import { TodoPage } from "../page-object/TodoPage"

describe('todo actions test', () => {
    const todoPage = new TodoPage
    const todoText = 'hello'

    beforeEach(() => {
        todoPage.navigateDelay()
        todoPage.addToDo(todoText)
    })

    it('add to do', () => {
        todoPage.verifyTodoText(todoText)
        todoPage.verifyTodoIsNotSelected(1)
    })
})

Он ссылается на 'todoPage.verifyTodoIsNotSelected' метод в кипарис / объект страницы. js класс. У этого класса есть утверждение, которое ссылается на другой метод в том же классе.

export class TodoPage{
    navigate() {
        cy.visit('http://todomvc-app-for-testing.surge.sh/')
    }

    navigateDelay() {
        cy.visit('http://todomvc-app-for-testing.surge.sh/?delay-new-todo=4000')
    }

    addToDo(todoText){
        cy.get('.new-todo', {timeout:6000}).type(todoText + '{enter}')
    }

    getTodo(index){
        cy.get('li:nth-child('+index+') > .view > .toggle')
    }

    selectToDo(index){
        this.getTodo(index).click()
    }

    clearToDo(){
        cy.contains('Clear completed').click()
    }

    filterAll(){
        cy.get(':nth-child(1) > a').click()
    }

    filterActive(){
        cy.get(':nth-child(2) > a').click()
    }

    filterCompleted(){
        cy.get(':nth-child(3) > a').click()
    }

    //assertions start
    verifyTodoIsNotSelected(index){
        this.getTodo(index).should('not.be.checked')
    }

    verfyTodoIsSelected(index){
        this.getTodo(index).should('be.checked')
    }

    verifyTodoText(todoText){
        cy.get('label').should('have.text',todoText)
    }

    verifyTodoMarkCompleted(){
        cy.get('label').should('have.css','text-decoration-line','line-through')
    }

    verifyClearTodo(){
        cy.get('.todo-list').should('not.have.descendants','li')
    }

    verifyTodoCount(count){
        cy.get('.todo-list li').should('have.length', count)
    }
}

Но когда я запустил тест, он завершается ошибкой со следующей ошибкой.

TypeError: Cannot read property 'should' of undefined

Я попробовал Следующее и оно прошло, но я хочу знать, почему вышеперечисленное не удалось?

verifyTodoIsNotSelected(index){
    cy.get('li:nth-child('+index+') > .view > .toggle').should('not.be.checked')
}

1 Ответ

1 голос
/ 27 апреля 2020

Вы должны вернуть метод cy.get здесь

getTodo(index){
        return cy.get('li:nth-child('+index+') > .view > .toggle')
}
...