>웹 프론트엔드 >JS 튜토리얼 >시스템 테스트

시스템 테스트

DDD
DDD원래의
2024-12-18 13:00:17546검색

System Testing

개요

왜 극작가인가?

Selenium보다 빠르고 최신이며 Capybara-DSL보다 구문이 더 명확합니다. 토론을 참조하세요.

주의 Playwright는 Capybara DSL과 함께 사용할 수 있어 기존 프로젝트에 적합할 것 같습니다. 하지만 적어도 제가 테스트한 결과 Capybara-DSL로 작성된 기존 사양이 유지되도록 구성하는 것은 불가능했습니다. 다시 작성해야 했어요.

Rails/RSpec의 극작가

문서에서 파생

설정

  • 모든 셀레늄 보석 제거
  • 그룹 테스트에 보석 카피바라 추가
  • 그룹 테스트 내에 gem playwright-ruby-client 추가
  • npm i --save-dev 극작가(문서와 달리 npx i로 설치하지 마세요... 종속성을 설치하지 않기 때문입니다)

playwright_helper와 같은 파일

require 'rails_helper'
require 'capybara'
require 'playwright'

RSpec.configure do |config|

  # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  # Docs https://playwright-ruby-client.vercel.app/docs/article/guides/rails_integration_with_null_driver
  # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  video_dir = '/tmp/rails-system-test-videos'

  config.before :all, type: :system do
    FileUtils.rm_rf(video_dir)
    FileUtils.mkdir(video_dir)
  end

  class CapybaraNullDriver < Capybara::Driver::Base
    def needs_server?
      true
    end
  end

  Capybara.register_driver(:null) { CapybaraNullDriver.new }

  config.around(driver: :null) do |example|
    driven_by :null
    Playwright.create(playwright_cli_executable_path: './node_modules/.bin/playwright') do |playwright|
      playwright.chromium.launch(headless: true) do |browser|
        browser.new_context(
          record_video_dir: video_dir,
          baseURL: Capybara.current_session.server.base_url
        ) do |context|

          # for requests this timeout can be too short, but for most steps it should be good
          # You can increase this in every selector on the test
          context.set_default_timeout(1500.0)

          @page = context.new_page

          # custom login process
          page.goto('/login-page', timeout: 50000) # first load may last longer
          ...

          example.run

        end
        if passed?
          FileUtils.rm(page.video.path)
        else
          puts "file://#{page.video.path}"
        end
      end
    end
  end

end

그리고 테스트:

require 'playwright_helper'

RSpec.describe "pw", type: :system, driver: :null do

  let(:page) { @page }

    it 'test' do
      page.goto('/')
    end
end

개요

위 내용은 시스템 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.