GitLab QA에서의 흐름

흐름은 자주 사용되는 행동의 순서입니다. 페이지 객체보다 더 높은 수준의 추상화입니다. 흐름에는 여러 페이지 객체나 기타 관련 코드가 포함될 수 있습니다.

예를 들어, 로그인 흐름은 모든 브라우저 UI 테스트에 포함된 두 단계를 캡슐화합니다.

# QA::Flow::Login

def sign_in(as: nil)
  Runtime::Browser.visit(:gitlab, Page::Main::Login)
  Page::Main::Login.perform { |login| login.sign_in_using_credentials(user: as) }
end

# 테스트에서 사용될 때

it '기본 사용자로 로그인을 한 후 테스트를 수행합니다' do
  Flow::Login.sign_in

  # 테스트 수행
end

QA::Flow::Login은 더 유용한 흐름을 제공하여 테스트가 쉽게 사용자를 전환할 수 있게 합니다.

# QA::Flow::Login

def while_signed_in(as: nil)
  Page::Main::Menu.perform(&:sign_out_if_signed_in)

  sign_in(as: as)

  yield

  Page::Main::Menu.perform(&:sign_out)
end

# 테스트에서 사용될 때

it '한 사용자로 테스트를 수행하고 다른 사용자로 검증합니다' do
  user1 = Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1)
  user2 = Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_2, Runtime::Env.gitlab_qa_password_2)

  Flow::Login.while_signed_in(as: user1) do
    # 사용자1로 설정 수행
  end

  Flow::Login.sign_in(as: user2)

  # 사용자2로 나머지 테스트 수행
end