Объедините отдельные тесты в один сквозной тест без повторения кода - PullRequest
0 голосов
/ 29 ноября 2018

Мы написали коллекцию Cypress-тестов, чтобы проверить определенные функциональные возможности для каждой части нашего приложения: customer_spec.js, order_spec.js, delivery_spec.js, doJob_spec.js и т. Д.Кипарис, проверяя каждую вещь в изоляции.Мы хотели бы иметь возможность затем вызывать эти отдельные тесты - или части теста - в одном файле для создания сквозных тестов, сохраняя при этом возможность запускать отдельные тесты.Эта концепция в некоторой степени существует с помощью команд, созданных в файле command.js - например, login - который вы затем можете вызывать в ваших отдельных тестах (используя login ()) вместо повторения кода входа.

Мы можемне найти никакой документации, которая говорит о том, возможно ли это, и если да, то как это сделать.Мы думали, что сможем создать файл customer_life_cycle_spec.js, который затем будет вызывать login (), addcustomer (), dojob (), orderitems (), receiveitems () и т. Д.

1 Ответ

0 голосов
/ 14 февраля 2019

Да, Cypress поддерживает возможность создания и повторного использования действий и состояний в вашем пользовательском интерфейсе, таких как регистрация и вход в систему до начала теста.

Однако , Cypress,Через cy.request() позволяет вам контролировать состояние браузера более мощно, чем пользователь, делая ваши тесты проще , быстрее , более надежно

Посмотрите этот пример ниже, где cy.request используется для создания / чтения состояния на вашем сервере.

В commands/index.js:

Cypress.Commands.add('login', (user) => {
    cy.request('POST', `${apiUrl}/users/login`, user)
})

Cypress.Commands.add("register", (user) => {
    cy.request('POST', `${apiUrl}/users/register`, user)
})

Cypress.Commands.add('getUser', (username) => {
    return cy.request('GET', `${apiUrl}/users/${username}`)
})

в register.spec.js:

it ('can register', () => {
    const user = {
      name: 'jake',
      email: 'jake@jake.com',
      password: '12345'
    }

    cy.visit('/register')
    cy.get('input[name="name"]').type(user.name)
    cy.get('input[name="email"]').type(user.email)
    cy.get('input[name="password"]').type(user.password)
    cy.get('input[name="password-confirm"]').type(user.password)
    cy.get('input[type="submit"]').click()

    // ensure register page sends you /home after register
    cy.url().should('contain', '/home')

    // expect user from server to match user from test
    cy.getUser(user.name)
    .then((dbUser) => expect(dbUser).to.deep.eql(user))
})

в login.spec.js:

it('can log in', () => {
    const user = {
        name: 'jane',
        email: 'jane@jane.com',
        password: '12345'
    }

    // register w/out UI
    cy.register(user)

    cy.visit('/login')
    cy.get('input[name="name"]').type(user.name)
    cy.get('input[name="password"]').type(user.password)
    cy.get('input[type="submit"]').click()

    // ensure the login page sends you home after login
    cy.url().should('contain', '/home')
})

в userSettings.spec.js:

it('can change email', () => {
    const user = {
        name: 'jane',
        email: 'jane@jane.com',
        password: '12345'
    }

    // register and login w/o UI
    cy.register(user)
    cy.login(user)

    cy.visit('/settings')
    cy.get('input[name="email"]').type('UpdatedEmail@jane.com')
    cy.get('input[type="submit"]').click()

    cy.getUser(user.name)
    .then((dbUser) => expect(dbUser.email).to.eql('UpdatedEmail@jane.com'))
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...