cypress - 将 Cypress 中的测试代码划分为代码块
问题描述
我们已经编写了 cypresstest,现在我们想将其划分为代码块。在开始做除代码之前,所有测试都相应地运行并通过。但是自从变成块后,我们开始收到关于 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()
})
})
解决方案
这完全有道理:) 在第二个测试块“作业页面”中,您没有登录。您应该beforeEach
在每个测试块中使用钩子登录。在 cypress 中,每个测试都在干净的画布上执行,以确保之前测试中的错误不会导致下一次测试失败。意味着您必须在每次测试前登录。这就是为什么你需要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;
});
};
}
推荐阅读
- javascript - 使用ajax在位置0的JSON中出现意外的令牌N
- html - MDbootstrap 移动设备上的大量空白
- javascript - 为什么换行符会影响 eval 返回?
- c# - 在 DOT NET 中未使用 Microsoft.Extensions.Caching.Memory 存储缓存
- javascript - 如何在模式中修复我的链接,使其正常工作
- python - 尝试将python中的nltk上传到heroku for web app,但没有上传
- javascript - jQuery 不要发送 msg.message
- typescript - 量角器过滤器多次调用
- docker - Docker - 将新内容上传到生产环境的最安全方式
- ruby-on-rails - 如何使用 Rails 5.2 从 Arel 查询中的日期中提取一周?