簡體   English   中英

賽普拉斯:如何在整個測試過程中測試路由狀態碼?

[英]Cypress: how to test routes status code throughout entire test?

我有一個測試,其中某個獲取請求發生了大約 70 次,在測試結束時我需要檢查所有狀態代碼是否為200204 到目前為止,我正在攔截請求並可以檢查該 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM