赛普拉斯 net::ERR_EMPTY_RESPONSE 真实服务器调用

Cypress net::ERR_EMPTY_RESPONSE on real server calls

我正在尝试使用 cypress e2e 测试来测试我的全栈 angular-nestjs-application。

来自 angular 的服务器调用不会localhost:443 到达我的后端 运行 (我用 0.0.0.0 测试了它, 127.0.0.1 就像其他一些要求的答案一样 - 但没有成功。 我也确实尝试像其他一些帖子建议的那样在我的机器上添加本地代理 - 再次没有成功)。

另一方面:cy.request('http://localhost:443/...' 发送的请求确实到达了我的后端。我能够在 beforeEach 中发送请求,保存响应,拦截 真实 请求并将保存的响应数据提供给它。

cy.login() 进行登录调用,为我的后端构建有效会话。

    describe('test', () => {
        let data: any;

        beforeEach(() => {
            cy.login();
            cy.request('http://localhost:443/load').then(response => {
                data = response;
                console.log('BeforeEach Response: ', data);
            });
        });

        it('load data', () => {
            cy.visit('/');
        });
    });

但是 beforeEach 中的以下行确实有效:

cy.request('http://localhost:443/load').then(response => {
    data = response;
    console.log('BeforeEach Response: ', data);
});

所以下面的测试完全有效:

    describe('test', () => {
        let data: any;

        beforeEach(() => {
            cy.login();
            cy.request('http://localhost:443/load').then(response => {
                data = response;
                console.log('BeforeEach Response: ', data);
            });
        });

        it('load data', () => {
            cy.intercept('/load', data);
            cy.visit('/');
        });
    });

那么我缺少什么来使用真实的服务器请求成功测试我的应用程序 - 无需手动发送相同的请求并打桩真实的请求?

我假设您在 cypress.json 中的 baseUrl 不是 localhost:443。如果是这种情况,那么对于 chrome-based 浏览器,您可以将 chromeWebSecurity 设置为 false。参见 https://docs.cypress.io/guides/guides/web-security#Set-chromeWebSecurity-to-false。 如果这没有帮助,或者您必须使用 firefox 进行测试,那么您必须将您的应用程序和所有必需的 backend-services 放在代理后面,这样看起来每个请求都由代理提供服务。 如果你在 dev-mode 中有 Angular 那么你已经有一个代理并且你可以通过 proxy.conf.json 配置你的后端服务。参见 https://angular.io/guide/build#proxying-to-a-backend-server