赛普拉斯:如何在整个测试过程中测试路由状态码?
Cypress: how to test routes status code throughout entire test?
我有一个测试,其中某个获取请求发生了大约 70 次,在测试结束时我需要检查所有状态代码是 200
还是 204
。到目前为止,我正在拦截请求并可以检查 response.statusCode
是否有 1 个请求,但我无法为其余的请求做这件事。这是我目前所拥有的。
it('Testing', function () {
cy.intercept('proxy/test*').as('test')
cy.visit('/user/test');
const aliases = [];
for (let i = 1; i <= 70; i++){
aliases.push('@test')
}
.............
.............
cy.wait(aliases).its('response.statusCode').should('eq', 200 || 204)
我得到的错误是
Timed out retrying after 4000ms: cy.its() errored because the property: response does not exist on your subject.
cy.its() waited for the specified property response to exist, but it never did.
有人可以帮忙吗?
你说了 大约 70 次,所以如果你正好测试了 70 次而实际上是 69 次你就会失败,即使所有状态代码正确。
因此您需要一个条件来告诉测试抓取已停止,通常屏幕上的某些内容仅在最终抓取后出现。
否则,您可以使用固定等待时间,但通常您会尽量避免这种情况。
const statusCodes = []
cy.intercept('proxy/test*', (req) => {
req.continue((res) => {
statusCodes.push(res.statusCode)
})
}).as('test')
// assert an element on page that only appears after all fetches finished
cy.wrap(statusCodes).should(codes => {
expect(codes.every(code => code === 200 || code === 204)).to.eq(true)
})
如果您知道确切的提取次数,那就更容易了
const statusCodes = []
cy.intercept('proxy/test*', (req) => {
req.continue((res) => {
statusCodes.push(res.statusCode)
})
}).as('test')
Cypress._.times(70, () => cy.wait('@test')) // exact call count is known
cy.wrap(statusCodes).should(codes => {
expect(codes.every(code => code === 200 || code === 204)).to.eq(true)
})
我有一个测试,其中某个获取请求发生了大约 70 次,在测试结束时我需要检查所有状态代码是 200
还是 204
。到目前为止,我正在拦截请求并可以检查 response.statusCode
是否有 1 个请求,但我无法为其余的请求做这件事。这是我目前所拥有的。
it('Testing', function () {
cy.intercept('proxy/test*').as('test')
cy.visit('/user/test');
const aliases = [];
for (let i = 1; i <= 70; i++){
aliases.push('@test')
}
.............
.............
cy.wait(aliases).its('response.statusCode').should('eq', 200 || 204)
我得到的错误是
Timed out retrying after 4000ms: cy.its() errored because the property: response does not exist on your subject.
cy.its() waited for the specified property response to exist, but it never did.
有人可以帮忙吗?
你说了 大约 70 次,所以如果你正好测试了 70 次而实际上是 69 次你就会失败,即使所有状态代码正确。
因此您需要一个条件来告诉测试抓取已停止,通常屏幕上的某些内容仅在最终抓取后出现。
否则,您可以使用固定等待时间,但通常您会尽量避免这种情况。
const statusCodes = []
cy.intercept('proxy/test*', (req) => {
req.continue((res) => {
statusCodes.push(res.statusCode)
})
}).as('test')
// assert an element on page that only appears after all fetches finished
cy.wrap(statusCodes).should(codes => {
expect(codes.every(code => code === 200 || code === 204)).to.eq(true)
})
如果您知道确切的提取次数,那就更容易了
const statusCodes = []
cy.intercept('proxy/test*', (req) => {
req.continue((res) => {
statusCodes.push(res.statusCode)
})
}).as('test')
Cypress._.times(70, () => cy.wait('@test')) // exact call count is known
cy.wrap(statusCodes).should(codes => {
expect(codes.every(code => code === 200 || code === 204)).to.eq(true)
})