Testcafe:如何在 4xx 或 5xx 响应中出错?

Dan*_*lan 5 testing automated-tests node.js angularjs testcafe

我正在开发一个对外部资源进行大量调用的遗留应用程序。我正在尝试重构这个应用程序,并且我编写了testcafe测试来帮助我在犯错时通知我。我没有用 运行我的测试--skip-js-errors,但是当我收到 404 错误并且控制台打印出来时:

在此处输入图片说明

测试不会停止。我希望像这样的错误成为我被告知的事情。 如何使 4xx 和 5xx 网络响应失败 testcafe? 如果这很重要,我将使用 angular 1.2。如果可以,我会更改所有远程调用以在 4xx 或 5xx 上抛出异常,但这是我不理解的遗留代码,我确信这样做会破坏功能。

小智 5

我建议你扩展RequestLogger来检查请求。您可以根据请求状态抛出错误。例如:

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

fixture `test`                                                                                                                               
    .page('https://testcafe.devexpress.com/Details2/')                                                                                       

class FailedRequestsLogger extends RequestHook {                                                                                             
    constructor (...args) {                                                                                                                  
        super(...args);                                                                                                                      

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

    onRequest (request) {                                                                                                                    
    }                                                                                                                                        

    onResponse (response) {                                                                                                                  
        if (response.statusCode >= 400)                                                                                                      
            this.events.emit('failed-request', response.statusCode);                                                                         
    }                                                                                                                                        

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

const logger = new FailedRequestsLogger();                                                                                                   

test.requestHooks(logger)('test', async t => {                                                                                               
    await logger.waitForFailedRequest(async () => {                                                                                          
        await t.click('body');                                                                                                              
        await t.wait(10000);                                                                                                                
    });                                                                                                                                      
});  
Run Code Online (Sandbox Code Playgroud)