【问题标题】:Check for failed http requests in the TestCafe fixture在 TestCafe 夹具中检查失败的 http 请求
【发布时间】:2022-08-18 15:43:26
【问题描述】:

有时我在访问应用程序的某些部分时会遇到 500 和 502 错误,我们希望能够捕获该错误并使 TestCafe 测试失败。

我们目前有这个设置https://stackoverflow.com/a/52443604/7551391,当我们调用waitForFailedRequest函数时它工作正常,它包裹了测试的内容,但我们想在夹具中或全局调用它,以便它总是看起来每次测试中出现 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()
  })

    标签: javascript testing automated-tests httprequest testcafe


    【解决方案1】:

    你可以在onResponse 方法中抛出一个错误。要全局设置挂钩,您可以使用.testcaferc.js config file 并在此处设置the option request

    const { RequestHook } = require('testcafe');
    
    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`)
        }
    }
    
    module.exports = {
        hooks: {
            request: new CustomRequestHook(),
        },
    };
    

    【讨论】:

    • 我们可以在 .testcaferc 文件中全局设置 requestHooks 吗?
    • 我更新了答案
    猜你喜欢
    • 2018-01-29
    • 2021-01-28
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2016-09-07
    • 2014-11-19
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多