作为量角器套件的一部分,我试图在测试失败后编写控制台网络日志。在afterEach()
块中时,代码可以正常工作,但在自定义茉莉花记者中时,则无法执行promise。据我所知,诺言从未执行,但没有已知/显示的错误。
量角器配置(简体):
exports.config = {
specs: ['./e2e/**/*.spec.ts'],
capabilities: {
browserName: 'chrome',
chromeOptions: {
perfLoggingPrefs: {
enableNetwork: true,
enablePage: false,
}
},
loggingPrefs: {
performance: 'ALL',
browser: 'ALL'
},
},
onPrepare() {
jasmine.getEnv().addReporter({
specDone: result => {
new ErrorReporter(browser).logNetworkError(result);
}
});
},
};
ErrorReporter:
class ErrorReporter {
constructor(browser) {
this.browser = browser;
}
logNetworkError(result) {
if(result.status === 'failed') {
// execution makes it in here
this.browser.manage().logs().get('performance').then(function(browserLogs) {
// execution DOES NOT make it here
browserLogs.forEach(function(log) {
const message = JSON.parse(log.message).message;
if(message.method === 'Network.responseReceived') {
const status = message.params.response.status;
const url = message.params.response.url;
if(status !== 200 && status !== 304) {
console.log(`----E2E NETWORK ERROR----`);
console.log(`STATUS: [${status}]`);
console.log(`URL: [${url}]`);
console.log(`RESPONSE: [${log.message}]`);
}
}
});
});
}
}
}
module.exports = ErrorReporter;
在logNetworkError()
块中执行时,afterEach()
方法中的代码可以完全正常工作,但是在作为自定义报告程序执行时,从不写出任何日志。我希望这也可以作为茉莉花记者。
如果无法以茉莉花报告者的身份执行此操作,是否有某种方法可以在afterEach()
块中访问已执行测试的结果?我不想登录成功执行测试。
答案 0 :(得分:0)
我想出了解决方案。有两个主要问题。首先是我需要在创建日志的函数中使用async和await:
async logNetworkError(result) {
if(result.status === 'failed') {
const logs = await this.browser.manage().logs().get('performance');
logs.forEach((log) => {
const message = JSON.parse(log.message).message;
if(message.method === 'Network.responseReceived') {
const status = message.params.response.status;
const url = message.params.response.url;
if(status !== 200 && status !== 304) {
console.log(`-----E2E NETWORK ERROR-----`);
console.log(`TEST NAME: ${result.fullName}`);
console.log(`STATUS: [${status}]`);
console.log(`URL: [${url}]`);
console.log(`RESPONSE: [${log.message}]`);
}
}
});
}
}
问题的第二部分是另一个保存屏幕截图的记者没有async
和await
来阻止其他记者完成工作。向两个记者添加异步/等待可以解决此问题。