当无法在 TestCafe 中解析第二个 URL 时断言 URL 重定向

Assert a URL redirection when second URL can not be resolved in TestCafe

我想断言下一个 URL 已解决。它是由 SendGrid 生成的 URL 并更改您在浏览器中搜索它的一个。问题是要访问第二个,您需要访问我们的 VPN。出于安全原因,我不想 运行 我们的 VPN 背后的测试,但我想断言来自 SendGrid 的重定向是否成功(我确切地知道解析后的 URL 会是什么样子)。

http://link.novemberfirst.com/ls/click?upn=xv2uBCiA-2BCPo8h2-2F2dXgSrKknBTgupgeogOdcsRpYXuG4cjYbJP1rkCCJ1zjXTj38aokCt-2BgUcrLMVeDJ0JrFznoH-2B4JC2bxKIUkkwWGvQPWZcW89yPA45cRI4YcN4kxIWOMamgXF7h0x-2BEumL4yC4cDPD6ib2Q-2FupSBTSJJvOohq9d3QApg3ktPsAr3s71dx8_f_jH2AkQSF6IE8lczSdagr9wUDFh2rSjc-2FDARefysokTdqaEnXNbSWSyYzYz4pIdy3KyzKI2WI84SAhUWA6Ysrwbu-2FEyv-2FLVj28UDJ96u9m0SfvfLMgVTTOypSpnfzJhz8HBp-2BErWzxw-2BHQBTWKJQCCsahFPt7FAp2yflzLocMroRH-2Blyqk-2Be61Q84U19yBAQ11beRliiLdNHnzJwd88-2FGbgPTIQoQi0xlVBQxVt08NyA-3D

使用 ClientFunction(() => document.location.href) 时会出现问题,您只会得到一个已成功解决的 URL,并且由于我没有连接到 VPN,最后一个 URL 不会可以显示,不能断言。

有没有办法在重定向完成后创建断言,即使我无法解析第二个 URL?

await t.navigateTo(URL);

const getLocation = ClientFunction(() => document.location.href);

await t.expect(getLocation()).contains('expected-url');

在这种情况下,预期的-url 将是:https://app-uat.novemberfirst.cloud.ec/#/public/reset-password/208100002/61849181@abc.com/F1PMDcC05gYhlqh82UDnl183/dan

找到解决方法。

基本上,在发出 http 请求时,您必须禁用任何重定向才能获得 url。

private async resolveRedirectLink(url) {
    let redirectedURL;
    try{
        let response = await fetch(url, {redirect: 'manual'});
        let link = await response.text();
        let matches = link.match(/"(.*?)"/);
        redirectedURL = matches[1];
    }
    catch(error){
        redirectedURL = url;
        console.warn('Error redirecting URL: ' + error.message );
    }
    return redirectedURL;
}

这是我的代码中使用的片段。