zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    int 类型 占多少字节是由什么决定的
    layer.js漂亮的弹出框
    jquery分页点击后页面置顶
    动态请求页面生成静态页
    弹出ifame页面(jquery.reveal.js)
    Request.QueryString["id"] 、Request.Params["id"] 的强大
    为什么现在改用int.TryParse了
    时间格式(例如:2015-11-09)
    返回前一页
    sql获得某个时间段的数据
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9270948.html
Copyright © 2011-2022 走看看