我们已经编写了赛普拉斯测试,现在希望将其划分为代码块。在开始做除法之前,所有测试都相应地运行并通过。但是由于变成了块,所以我们开始收到有关401身份验证的错误。
这是赛普拉斯代码块的正确语法吗?
/* eslint-disable no-undef */
describe('Log in', () => {
it('Successfully loads', function () {
cy.visit('/')
.get('input[type="email"]')
.type('XXXX')
.get('input[type="password"]')
.type('XXXX')
.get('[style="text-align: center;"] > .ui').click()
})
describe('The Assignments Page', () => {
it('Add Assignment', function () {
cy.get('[href="/assignments"]').click()
cy.get('.grey').click()
cy.get('.ui > .search').type('Astra Zeneca')
cy.get(':nth-child(2) > .ui > input').type('System Development')
cy.get('textarea').type('This is a short text')
cy.get(':nth-child(4) > .ui').click()
cy.get('a.ui').click()
})
})
完全有道理:)在第二个测试块“ Assignments页面”中,您尚未登录。应beforeEach
在每个测试块中使用hook进行登录。在赛普拉斯中,每个测试都在干净的画布上执行,以确保先前测试中的任何错误不会使下一个测试失败。表示您必须在每次测试前登录。这就是为什么您需要beforeEach
钩子。
同样,这里的最佳实践是以编程方式登录-意味着不必单击输入字段并键入(cy.type),而是发送登录请求cy.request
并检查响应是否成功。
在beforeEach挂钩中登录的示例代码:
beforeEach(() => {
cy.request({
method: "POST",
url: '<YOUR LOGIN ENDPOINT>',
body: {
email: <VALUE>,
pass: <VALUE>
},
form: true
}).then(response => {
expect(response.status).to.eq(200);
expect(response.body.success).to.be.true;
});
};
}
您的回答确实很有帮助。谢谢!@DurkoMatko
@hereinsweden太好了!如果答案有帮助,您可以通过单击答案左侧的灰色大选中按钮来接受它:)欢迎使用Stack Overflow!