システムテスト

DDD
リリース: 2024-12-18 13:00:17
オリジナル
540 人が閲覧しました

System Testing

概要

なぜ劇作家なのか?

Selenium よりも高速で新しく、Capybara-DSL よりも明確な構文を持っています。ディスカッションを参照してください。

注意 Playwright は Capybara DSL で使用できるため、既存のプロジェクトに適していると思われます。しかし、少なくとも私のテストでは、Capybara-DSL で書かれた既存の仕様を維持できるように構成することはできませんでした。書き直さなければなりませんでした。

Rails/RSpec 内の劇作家

ドキュメントから派生

セットアップ

  • すべての Selenium ジェムを削除します
  • グループテスト内に宝石カピバラを追加
  • グループテスト内に gem playwright-ruby-client を追加
  • npm i --save-dev playwright (ドキュメントとは異なり、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート