[英]Cypress: how to test routes status code throughout entire test?
我有一個測試,其中某個獲取請求發生了大約 70 次,在測試結束時我需要檢查所有狀態代碼是否為200
或204
。 到目前為止,我正在攔截請求並可以檢查該 1 個請求的response.statusCode
但我在為 rest 執行此操作時遇到了問題。這是我目前所擁有的。
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)
我得到的錯誤是
4000 毫秒后重試超時:cy.its() 出錯,因為屬性:響應在您的主題上不存在。
cy.its() 等待指定的屬性響應存在,但它從未存在。
有人能幫忙嗎?
你說了大約 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)
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.