与Fypress一起使用Faker

问题描述 投票:2回答:1

我从赛普拉斯开始,我想添加Faker来生成随机值。但是我得到以下结果。您能帮我排除故障吗?

login_page.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.
cypress faker
1个回答
0
投票

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常量。

  • 如果我没记错的话,您想测试状态201

    201创建该请求已得到满足,并导致创建了一个或多个新资源。

© www.soinside.com 2019 - 2024. All rights reserved.