node.js - 赛普拉斯 cy.wait 不适用于 AWS CodeBuild
问题描述
我使用 Cypress (v 4.12.1) 为我的 React App 编写了一些集成测试。我在 AWS 上有一个 CI/CD,我需要在其中集成它们。涉及的产品有 GitHub(源存储库)、AWS CodePipeline、AWS CodeBuild。
如果我必须测试一页的方面,赛普拉斯测试成功。如果测试涉及 API 调用,并且我必须使用该cy.wait()
函数,我得到的错误是:
CypressError: `cy.wait()` timed out waiting `5000ms` for the 1st request to the route: `agreements`. No request ever occurred.
我检查了我的服务器日志,我看到收到的 API 请求,所以问题是赛普拉斯不知道 API 调用是否已经进行。然后我在 GitHub https://github.com/cypress-io/cypress/issues/3427上发现了这个问题,但我发现的建议是我正在使用的建议:
- 确保 cy.server() 和 cy.route() 在您 cy.visit() 之前或在您执行将导致 XHR 请求发出的操作之前定义。
- 如果需要,请确保在 cy.route() 上定义方法。cy.wait() 默认只自动监听 GET 请求。
在这里您可以找到为我的集成测试编写的代码:
context("Test Page", () => {
before(() => {
cy.server();
cy.route({
method: "POST",
url: `https://myserver.com/${Cypress.env("ENV")}/login`,
status: 201,
}).as("login");
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
cy.visit("http://localtest.myserver.com:3000/test_page");
// Dismiss cookie message
cy.get("[data-cy=dialog-actions]").find("button").click();
cy.log('Cookie message dismissed');
});
it("landed on the agreements page", () => {
cy.bypassLogin().then((xhr) => {
LOGIN_ID = xhr.body["loginId"];
cy.route({
method: "GET",
url: `https://myserver.com/${Cypress.env("ENV")}/login/${LOGIN_ID}/agreements`,
status: 200,
}).as("agreements");
});
cy.wait("@agreements").then((xhr) => {
NUM_AGREEMENTS = xhr.response.body.length;
let requiredAgreements = [];
let notRequiredAgreements = [];
xhr.response.body.forEach((elem, idx) => {
elem.isRequired
? requiredAgreements.push(idx)
: notRequiredAgreements.push(idx);
});
IDX_REQUIRED_AGREEMENTS = requiredAgreements;
IDX_NOT_REQUIRED_AGREEMENTS = notRequiredAgreements;
expect(xhr.status).to.eq(200);
});
});
有人可以帮我解决这个问题吗?
解决方案
推荐阅读
- python-3.x - 通过 Python 更新 sqlite 表中的特定列
- c# - 交换和替换文本文件 C# 中的数字
- laravel - 让用户在 Laravel Jetstream 上一起注册并接受邀请
- reactjs - React-Admin 自定义登录页面和 React Hook
- firebase - Firebase 将 PDF 上传到存储
- python - 如何将数据集分成三个相等的部分?
- python - 是否有标准的 python3 方法来进行“步进”查找?
- python - Python中3D数组与1D内核的卷积
- zsh - 在 MacOS Catalina 上配置 Z Shell ohmyzsh 主题字体
- mysql - 什么是自加入,它是如何工作的?我确实知道它用于将表连接到自身,我正在尝试了解它背后的工作机制