Maison > interface Web > js tutoriel > Test du système

Test du système

DDD
Libérer: 2024-12-18 13:00:17
original
541 Les gens l'ont consulté

System Testing

Aperçu

Pourquoi dramaturge ?

Il est plus rapide et plus récent que Selenium et a une syntaxe plus claire que Capybara-DSL, voir Discussion.

Attention Playwright peut être utilisé avec Capybara DSL, ce qui sonnerait bien pour les projets existants. Mais, au moins lors de mes tests, il n'a pas été possible de le configurer pour que les spécifications existantes écrites en Capybara-DSL puissent persister. J'ai dû les réécrire.

Dramaturge au sein de Rails/RSpec

Dérivé de Docs

Configuration

  • Supprimez toutes les gemmes de sélénium
  • ajouter le gem capybara dans le test de groupe
  • ajouter un joyau dramaturge-ruby-client dans le test de groupe
  • npm i --save-dev playwright (contrairement aux documents, ne l'installez pas par npx i ... car il n'installerait pas de dépendances)

un fichier comme 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
Copier après la connexion

et un test :

require 'playwright_helper'

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

  let(:page) { @page }

    it 'test' do
      page.goto('/')
    end
end
Copier après la connexion

Aperçu

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal