[Cypress] Create True end-to-end Tests with Cypress (Smoke test)

Posted answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Cypress] Create True end-to-end Tests with Cypress (Smoke test)相关的知识,希望对你有一定的参考价值。

Integration tests let us keep our tests fast and reliable. They also allow us to test scenarios that are hard to recreate in a full end-to-end setup. That being said, we should round out our test suite with some high-level smoke tests. In this lesson, we’ll create some tests that seed our data-source and avoid stubbing our network calls, allowing us to test all parts of the application while using known data to keep our tests flake-free.

 

describe(Smoke Tests, () => {

    // context is no difference with describe in functionality
    context(No Todos, () => {
        it(Adds a new todo, () => {
            cy.server()
            cy.route(POST, /api/todos).as(save)

            cy.visit(/)

            cy
                .get(.new-todo)
                .type(New todo)
                .type({enter})

            cy.wait(@save)

            cy.get(.todo-list li).should(have.length, 1)

        })
    })

});

Now we have post a new todo to the backend, it will pass the test.

But the problem is that, when you rerun the test again, it will faild, because now in the db, we have two todos.

 

Therefore, we need to clear the db everytime before we run the test:

describe(‘Smoke Tests‘, () => {
    beforeEach(() => {
        cy.request(‘DELETE‘, ‘/api/todos/all‘)
    })


    // context is no difference with describe in functionality
    context(‘No Todos‘, () => {
        it(‘Adds a new todo‘, () => {
            cy.server()
            cy.route(‘POST‘, ‘/api/todos‘).as(‘save‘)

            cy.visit(‘/‘)

            cy
                .get(‘.new-todo‘)
                .type(‘New todo‘)
                .type(‘{enter}‘)

            cy.wait(‘@save‘)

            cy.get(‘.todo-list li‘).should(‘have.length‘, 1)

        })
    })
})

 

 

Another example:

    context(‘With todos‘, () => {
        beforeEach(() => {
            cy.fixture(‘todos‘).then(todos => {
                cy.request(‘POST‘, ‘/api/todos/bulkload‘, {todos})
            })

            cy.server()
            cy.route(‘GET‘, ‘/api/todos‘).as(‘load‘)

            cy.visit(‘/‘)

            cy.wait(‘@load‘)
        })

        it(‘Deletes todos‘, () => {
            cy.route(‘DELETE‘, ‘/api/todos/*‘).as(‘delete‘)

            cy
                .get(‘.todo-list li‘)
                .each($el => {
                    cy
                        .wrap($el)
                        .find(‘.destroy‘)
                        .invoke(‘show‘)
                        .click()

                    cy.wait(‘@delete‘)
                })
                .should(‘not.exist‘)
        })
    })

 

About smoke test

以上是关于[Cypress] Create True end-to-end Tests with Cypress (Smoke test)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cypress 测试重定向到新路由

Cypress学习7-连接器connectors

Cypress学习7-连接器connectors

MySQL CREATE FUNCTION 在 END IF 上中断

create-react-app 报错 Unexpected end of JSON input while parsing near '

在 Sequelize Model.create 上设置 raw = true