ReactJS + Cypress E2E 测试

ReactJS + Cypress E2E testing

对于任何有 React + Cypress 经验的人的一个快速问题 - 编写我的第一套 E2E 测试,这是困扰我的问题:

cy.visit('http://movinito.docker.localhost:3000/company/subcontractors');

有效,但是

cy.visit('/company/subcontractors');

没有按预期工作(登录后将我重定向到仪表板,并在我尝试断言路径名包含 'subcontractors' 时停留在那里)。

我在 cypress.json 中的 baseUrl 是

{"baseUrl": "http://react_frontend.movinito.docker.localhost:3000"}

它通常有效(以防万一您怀疑)。

我想使用更短、更好的版本 cy.visit('/company/subcontractors'); 而不是冗长的 baseUrl 重新输入...

在我使用

的 .visit 之前添加这一点可能很重要
cy.request('POST', 'http://movinito.docker.localhost/user/login?_format=json', {name,pass});

[成功] 登录...正如我所说,整个过程都有效,但我无法使用 baseUrl,必须使用基于 url 的完整环境的 .visit 命令。 ..

这是[有效的]完整测试代码

   describe('Subcontractors section', ()=> {
        it('renders properly', ()=> {
            const { name, pass } = {name: 'info@batcave.com', pass: '123#456'}

            cy.request('POST', 'http://movinito.docker.localhost/user/login?_format=json', {
                name,
                pass
            });

            cy.visit('http://movinito.docker.localhost:3000/company/subcontractors');
//    
// I want to replace the above line with cy.visit('/company/subcontractors')
//
            cy.location('pathname').should('include', '/company/subcontractors');
            cy.get('[data-cy=page-title]').should('have.text', 'Subcontractors');
        })
    });

嗯,我阅读了有关 visit() 和 request() 的文档,这应该适用于:

describe('Subcontractors section', ()=> {
  it('renders properly', ()=> {
    cy.visit({
      url: 'http://movinito.docker.localhost/user/login?_format=json',
      method: 'POST',
      body {
        name,
        pass
      }
    })

    cy.visit('/company/subcontractors')
    cy.location('pathname').should('include', '/company/subcontractors')
  })
});

// cypress.json
{
  "baseUrl": "http://react_frontend.movinito.docker.localhost:3000"
}