Javascript 如何在Puppeter page.on事件中使用Mocha断言?未经处理的PromisejectionWarning:AssertionError

Javascript 如何在Puppeter page.on事件中使用Mocha断言?未经处理的PromisejectionWarning:AssertionError,javascript,node.js,mocha.js,puppeteer,Javascript,Node.js,Mocha.js,Puppeteer,我试图在Puppeter的页面中运行断言。但是,在('response')事件上,抛出了以下错误,并且测试错误地通过:未处理PromisejectionWarning:AssertionError 我已经读到,返回一个承诺应该可以做到这一点,但是如果我不知道事件何时停止发出,我如何解决这个承诺呢 以下是完整的示例代码: const assert = require('assert'); const puppeteer = require('puppeteer'); const config =

我试图在Puppeter的
页面中运行断言。但是,在('response')
事件上,抛出了以下错误,并且测试错误地通过:
未处理PromisejectionWarning:AssertionError

我已经读到,返回一个承诺应该可以做到这一点,但是如果我不知道事件何时停止发出,我如何解决这个承诺呢

以下是完整的示例代码:

const assert = require('assert');
const puppeteer = require('puppeteer');
const config = require('../config.json');

describe('Tests', function () {
    let browser;
    let page;

    this.timeout(30000);

    before(async function () {
        browser = await puppeteer.launch({
            headless: config.headless
        });
        page = await browser.newPage();
    });

    after(async function () {
        await browser.close();
    });

    it('No responses with blacklisted URLs', async function () {
        const blacklistedUrls = ['tia', 'example'];

        page.on('response', response => {
            blacklistedUrls.forEach(blacklistedUrl => {
                const contains = response.url().includes(blacklistedUrl);
                assert.equal(contains, false);
            });
        });

        await page.goto('http://google.com/');
    });
});

您可以在
页面的外部范围中使用数组。在
上填充黑名单URL,然后等待
页面。转到
使用
等待
选项完成页面加载,并在页面加载结束时断言数组长度。您甚至可以使用该数组在断言消息中打印列入黑名单的URL

请阅读内联评论

it('No response with blacklist url',异步函数(){
const blacklistedUrls=['tia','example'];
//有一个数组来保存每个被列入黑名单的URL
常量blacklistedUrlsFound=[];
第页('response',response=>{
//使用一些而不是forEach来评估规则,这样会更快
const hasBlacklistedUrls=blacklistedUrls.some(url=>response.url().indexOf(url)>=0);
//如果响应url包含黑名单url,请将该url添加到数组中
if(HasBlackListDurls){
blacklistedUrlsFound.push(response.url());
}
});
//访问tha页面并等待网络空闲(完成请求外部URL)
等待页面。转到('http://google.com/“,{waitUntil:[“networkidle0”]});
//最后,使用BlackListDurlsFound.length断言并打印黑名单URL
assert.equal(blacklistedUrlsFound.length>0,false,
`存在黑名单url:\n${blacklistedUrlsFound.map(url=>`\t${url}`)。join('\n')}`);
});
您将在没有任何异常错误的情况下运行测试,当然它将失败,因为存在至少包含
tia
的响应URL:


你检查我的答案了吗?请让我知道,如果它没有为你工作,所以我可以重新审查它。