testing - 需要在 cypress 中模拟 POST 请求
问题描述
9/16 更新:我已经改写了我的问题。我正在尝试使用 cypress 测试具有 Angular 前端(http://localhost:4200)和 .NET Core 后端(http://localhost:5000)的工作应用程序。
当应用程序启动时,会加载一个登录页面,其中包含用户名和密码字段。cypress 代码测试填写用户名和密码并点击提交按钮,如下面我的代码所示。
单击登录(提交)按钮时,它会触发对 .NET Core 后端的 POST 请求。该请求提交用户名和密码,如果用户通过验证,则会返回一个令牌作为响应。令牌被添加到会话存储并且用户已登录。会话存储中的此令牌值表示用户已登录。添加令牌后,用户将被重定向到主页。
现在后端没有运行。我需要模拟这个 POST 请求,以便 cypress 测试可以到达实际主页。
我想我需要存根这个 POST 请求,但我无法让这个代码工作。该请求只是中止并查看控制台它说该请求没有被存根。
这是我更新的柏树代码:
const username = 'johndoe';
const password = 'pass1234';
cy.server();
cy.get('h1').should('contain', 'Login');
cy.get('input[placeholder=Username]').type(username);
cy.get('input[placeholder=Password]').type(password);
cy.get('button[type=submit]').click();
cy.route({
method: 'POST',
url: 'http://localhost:5000/Authentication/Login',
response: {
access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' // some random characters
}
});
解决方案
如果在调用 POST(单击提交)之前设置路由,您可能会获得更多成功,
cy.server();
cy.route({
method: 'POST',
url: 'http://localhost:5000/Authentication/Login',
response: {
access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' // some random characters
}
});
...
cy.get('button[type=submit]').click();
但是,如果您的应用程序使用原生获取而不是 XHR,则赛普拉斯核心不会捕获此类请求。您必须添加一个polyfill,它实质上会修改window.fetch
方法以允许cy.route()
成功。
柏树.json
{
"experimentalFetchPolyfill": true
}
请注意限制部分,
局限性
实验性的 polyfill 并非万无一失。例如,它不适用于从 WebWorkers 或 ServiceWorker 发出的 fetch 调用。它可能不适用于流式响应和取消的 XHR。这就是为什么我们认为选择加入实验标志是避免破坏已测试应用程序的最佳途径。
推荐阅读
- javascript - 我可以在 PyQt5 QWebEngine 中将 Python 连接到 JavaScript 吗?
- python - 进行多项式线性回归时,Matplotlib 上的 x 轴不正确
- php - 当视图具有 @can 指令时,模拟 Laravel Gate 失败
- c - 如何将关系运算符与随机数生成器一起使用 (c)
- python - 有没有办法将 OneHot 编码的 SciPy 稀疏矩阵应用于 PCA?
- javascript - Javascript 中的柯里化函数:在 for 循环中使用参数作为属性
- python - 从 Firebase 中的字典中提取单个数据(使用 Pyrebase 和 Flask)
- angular - “ShoppingCartComponent”类型上不存在属性“myForm”
- python - 如何将数据帧中的字节值转换为python中的常规整数
- r - 重命名 JSON 实体流