簡體   English   中英

在 TestCafe 夾具中檢查失敗的 http 請求

[英]Check for failed http requests in the TestCafe fixture

有時我在訪問應用程序的某些部分時會遇到 500 和 502 錯誤,我們希望能夠捕獲該錯誤並使 TestCafe 測試失敗。

我們目前有這個設置https://stackoverflow.com/a/52443604/7551391並且當我們調用waitForFailedRequest function 並且它圍繞測試的內容或全局調用它時它工作正常,但我們想在夾具中或全局調用它它將始終在每次測試中查找 500 等錯誤。

我的主要問題是在failed_requests.waitForFailedRequest()中使用什么action參數,以便在每個測試中調用它。

failed_request_hooks.js

import EventEmitter from 'events'
import { RequestHook } from 'testcafe'


export class FailedRequestsLogger extends RequestHook {
    constructor (requestFilterRules, responseEventConfigureOpts) {
        super(requestFilterRules, responseEventConfigureOpts)

        this.events = new EventEmitter()
        this.failedRequestPromise = new Promise(resolve => this.events.once('failed-request', resolve))
    }

    async onRequest (event) {
    }

    async onResponse (event) {
        if (event.statusCode >= 500) {
            this.events.emit('failed-request', event.statusCode)
        }
    }

    async waitForFailedRequest (action) {                                                                                                          
        return Promise.race([                                                                                                                
                action(),                                                                                                                    
                this.failedRequestPromise.then(statusCode => Promise.reject(new Error(`Request failed with the ${statusCode} status code`))) 
        ])                                                                                                                
    }
}

測試文件

import { ClientFunction, Selector } from 'testcafe'
import { FailedRequestsLogger } from '../../api/failed_request_hook'
import data from '../../data/data.json'
import EditUrlRedirectsObjects from '../../pom/sites/url_redirects/edit_redirects_page_repo'
import GooglePreviewPageObjects from '../../pom/sites/url_redirects/google_preview_page_repo'
import HelperObjects from '../../pom/helpers'
import LoginPageObjects from '../../pom/login/login_page_repo'
import SitesPageObjects from '../../pom/sites/sites_page_repo'
import URLRedirectsPageObjects from '../../pom/sites/url_redirects/url_redirects_page_repo'
import WorkspaceMainNavPageObjects from '../../pom/navigation/workspace_main_nav_page_repo'


const failed_requests = new FailedRequestsLogger(/.*reborncf\.com/)

fixture `sites - url redirects`
  .page `${HelperObjects.get_base_url()}`
  .requestHooks(failed_requests)
  .beforeEach(async t => {
    await LoginPageObjects.login_with_password()
    await failed_requests.waitForFailedRequest()
  })

你可以在onResponse方法中拋出一個錯誤:

export class CustomRequestHook extends RequestHook {
    constructor (requestFilterRules, responseEventConfigureOpts) {
        super(requestFilterRules, responseEventConfigureOpts)
    }

    async onRequest (event) {
    }

    async onResponse (event) {
        if (event.statusCode >= 500)
            throw new Error(`Request failed with the ${event.statusCode} status code`)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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