Использование Faker с Cypress - PullRequest
4 голосов
/ 29 февраля 2020

Я начинаю с Cypress и хочу добавить Faker для генерации случайных значений. Но я получаю следующие результаты. Не могли бы вы помочь мне решить эту проблему?

страница входа в систему. js

const faker = require('faker');

before(() => {
    let userData = {
        randomName: cy.faker.name.findName(),
        randomEmail: cy.faker.internet.email(),
        randomPassword: cy.faker.random.number()
    }
}

describe('Create new user', function () {
    it('Create new user via API', function () {
        cy.request('POST', '/cadastrarUsuario', {
            nome: userData.randomName,
            email: userData.randomEmail,
            senha: userData.randomPassword
        })
            .then((resp) => {
                expect(resp.status).to.eq(200)
            })
    })
})

describe('Login with user just created', function () {
    it('Login with user just created via API', function () {
        cy.request('POST', '/logar', {
            email: userData.randomEmail,
            senha: userData.randomPassword
        })
            .then((resp) => {
                expect(resp.status).to.eq(200)
            })
    })
})

index. js

cy.faker = require('faker');

Выполнение Результаты

TypeError: Cannot read property 'name' of undefined

Because this error occurred during a 'before all' hook we are skipping all of the remaining tests.

1 Ответ

1 голос
/ 01 марта 2020

Cypress работает очень хорошо с простым javascript, поэтому простейшим способом заставить вашу страницу входа в систему будет следующий:

const faker = require('faker');

let userData = {
    randomName: faker.name.findName(),
    randomEmail: faker.internet.email(),
    randomPassword: faker.random.number()
}

describe('Create new user', function () {
    it('Create new user via API', function () {
        cy.request('POST', '/cadastrarUsuario', {
            nome: userData.randomName,
            email: userData.randomEmail,
            senha: userData.randomPassword
        })
            .then((resp) => {
                expect(resp.status).to.eq(201)
            })
    })
})

Примечания по исходному коду

  • Объявление userData должно находиться за пределами before(), в противном случае оно имеет локальную область действия только для функции before и не существует внутри it(). Это вызывает сообщение об ошибке. Вы все еще можете использовать before(), как это, что делает userData видимыми глобально
    let userData;

    before(() => {
      userData = {
        randomName: faker.name.findName(),
        randomEmail: faker.internet.email(),
        randomPassword: faker.random.number()
      }
    }
  • Похоже, вы пытаетесь сделать пользовательскую команду из фейера. Это возможно, но не обязательно для вашего простого сценария. Вы можете просто использовать faker const, импортированный сверху.

  • Если я не ошибаюсь, вы хотите проверить статус 201

    201 CREATED Запрос был выполнен и привел к созданию одного или нескольких новых ресурсов.

...