我在cypress中创建了一些集成测试。
我目前正在注册注册程序。 - 这是一个文件测试。
registration.spec.js
现在,我想运行login.spec.js测试。如何使用在registration.spec.js中创建的动态电子邮件,并将该电子邮件用于" login.spec.js"?
registration.spec.js
----> create a dynamic email address
----> do some tests
----> end registration test
login.spec.js
---> login with email/pw I created in the registration.spec.js file?
这是如何实现的。在柏树中是否有一种注入全球类型的交易?
此外,如果我将login.spec.js作为独立运行,是否有办法使用"提供的"凭证或通过全局参数保存的凭证是否可以运行所有测试?这有意义吗?
我想要运行所有测试......
registration.spec.js (create dynamic email/pw)
login.spec.js (use dynamic values from registration process)
or
login.spec.js (standalone, use supplied credentials)
答案 0 :(得分:1)
是的,Cypress
支持在UI中创建和重用动作和状态的功能,例如在测试前注册和登录。
然而,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'))
})