我从赛普拉斯开始,我想添加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.
答案 0 :(得分:1)
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已创建 该请求已完成,并导致创建了一个或多个新资源。