我正在尝试在某些我使用cypress编写的UI测试中模拟服务器。我可能犯了一些基本的错误,可能不了解柏树如何处理请求。这是我直接从expressjs复制的示例应用程序-
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => res.send('Hello from /'));
app.get('/user', (req, res) => res.send('Hello from /user'));
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
然后使用赛普拉斯编写了一个简单的测试-
describe('Stubbed request', () => {
it('sends whatever response you want', () => {
cy.visit('http://localhost:3000/');
cy.server();
cy.route({
method: 'GET',
url: '/user',
response: [],
}).as('bar');
cy.visit('http://localhost:3000/user'); // cy.request() has same behavior
cy.wait('@bar');
})
})
我希望我应该得到一个空的答复,而不是“来自用户/的问候”,因为我已经用柏树把它打断了。甚至cy.wait也失败,并显示以下消息:“ CypressError:超时重试:cy.wait()超时,等待5000ms的路由请求到第一个请求:'bar'。从未发生请求。”我显然做错了。有人可以帮我了解我在做什么错吗?提前致谢。
答案 0 :(得分:0)
您只能存根/监视在您的应用程序中创建的XHR请求。 cy.visit
永远不会发出这样的xhr请求。您都不可以对cy.request
发出的请求进行存根处理,因为该请求的目的是独立于所有活动网络存根使用。
这意味着,您可以对/users
进行存根处理,但是在测试中,您可以使用cy.request
向该路由发出真正的请求。
在您的情况下,您必须提供一个静态html网站,并明确表示包含一个按钮。在点击按钮后,您可以执行$.get(' /user')
。然后,该请求将被存根。
当前我不在家,所以我无法提供一个可运行的示例。但是有了上面的提示,您应该可以做到这一点。让我知道您是否需要进一步的帮助。
您还可以查看cypress XHR API call validation in test cases。在这里,我提供了一个可运行的示例冷杉进行监听和监视。