TIL

[TIL] 2023-0930

프라이D 2023. 9. 30. 17:53

Facts

- cypress e2e 테스트 작성중... 특정 응답에 대한 케이스를 테스트하는 중이라 intercept 활용중

 

Feelings

- 연휴동안 엄청 쉬고 다시 시작하려니 힘들다. 하기 힘든 날에는 30분이라도 들여다 봐야지

 

Findings

- intercept 가 모든 요청에 대해 적용되는게 아니고, 첫번째 요청에만 적용되는 현상이 있음 => intercept 를 위치시키는 순서의 문제, axios interceptor 랑 헷갈렸다. intercept 의 순서가 중요함..! 이 부분만 따로 실행시키는 initialize 메서드가 있으면 좋겠군. 

Cypress.Commands.add('migrationLogin', (email, password) => {
  // 이 구문이 실제 api 요청을 보내게 만드는 로직보다 전에 실행되어 있어야 한다.
  cy.intercept(
    { method: 'POST', pathname: '**/auth/signin' },
    {
      statusCode: 201,
      body: {
        // ... 
      },
    }
  ).as('migrationLogin');
  cy.login(email, password);
  cy.wait('@migrationLogin');
});

- cypress 는 보안상의 이유로 같은 도메인에 대해서만 테스트를 진행할 수 있다. 따라서 외부 도메인으로 리다이렉트 되는 경우, 리다이렉트 여부를 파악하기 위해서는 해당 request 를 검증하는 방식으로 접근해야한다.

cy.intercept(
  'POST',
  '리다이렉트 될 주소'
).as('redirect');

 cy.wait('@redirect')
  .its('request.body') // 혹은 request.url 로 도메인을 확인할 수 있음
  .should('include', '리다이렉트 하면서 보낼 데이터');

 

Feedback

- action 에 대한 repository 를 만들어서 테스트 로직을 구성하는 방식이 상당히 이해하기 쉽고 좋다. 링크

- 테스트 로직 이외에 해야할게 많아서 진도를 많이 못나가고 있음... 아무래도 외부 api 연동된 부분에 대한 테스트 로직이다 보니 더 그러한 것 같다. 

 

Future Action

- 제대로 동작할 수 있게 모킹하자