6 de junho de 2020 1,654 lê
>>>
>>

>

>

>

>

>

@abdelpAbdel Pérez

Há alturas em que quer saber como é que os seus testes capybara estão a interagir com as suas páginas, às vezes não é suficiente o login no seu console para determinar porque eles não estão funcionando como esperado, é por isso que você pode fazê-lo exibir os passos no seu navegador em tempo real. Os passos para fazer isso são realmente fáceis graças ao Projeto Selenium, que está encarregado de nos fornecer a infra-estrutura necessária para interagir com a interface de todos os principais navegadores da web.

Comecemos por especificar que ferramentas vamos usar neste tutorial e as respectivas versões, não é completamente necessário ser o mesmo que o seu, mas será melhor se forem:

$ lsb_release -aUbuntu 18.04.4 LTS$ rails -vRails 6.0.3.1$ ruby --versionruby 2.6.5p114 (2019–10–01 revision 67812) 

Ok, agora podemos começar a criar o nosso projecto:

$ rails new myApp -T

Vamos usar a opção -T para não gerar os ficheiros de teste, pois vamos fazê-lo manualmente. Depois disso, precisamos ir dentro da nossa pasta de projetos:

$ cd myApp

Testo sempre tentando executar o servidor antes de continuarmos a ter certeza de que tudo está instalado corretamente, e verificando se nenhum log de erros foi exibido no console

$ rails s

Se tudo estiver ok, podemos continuar.

Para seguir a abordagem TDD, primeiro precisamos criar nossos casos de teste com RSpec e Capybara, então vamos começar a colocar em nosso arquivo Gemfile as gemas necessárias no grupo de desenvolvimento e teste:

group :development, :test do . . . gem 'rspec-rails', '~> 4.0', '>= 4.0.1' gem 'capybara', '~> 3.32', '>= 3.32.2' gem 'selenium-webdriver', '~> 3.142', '>= 3.142.7'end

Note que, os três pontos antes das gemas são apenas para indicar as gemas já adicionadas em seu projeto.

Podemos proceder à instalação das gemas agora (você também pode usar a instalação do pacote que é o mesmo):

$ bundle

Se tudo foi instalado corretamente, agora precisamos instalar e configurar nossas gemas, vamos começar com RSpec, para fazer isso só precisamos executar o próximo comando:

$ rails g rspec:install

O nosso pequeno amigo roedor Capybara é um pouco mais elusivo. Primeiro, precisamos colocar na primeira linha do nosso /spec/rspec_helper.rbfile:

require 'capybara/rspec'

No nosso /spec/rspec_helper.rbfile:

require 'capybara/rspec'

>

No nosso /spec/rspec_helper.rb file:

Capybara.register_driver :selenium_chrome do |app| Capybara::Selenium::Driver.new(app, browser: :chrome)endCapybara.javascript_driver = :selenium_chrome

Tambem precisamos de mudar o parâmetro use_transactional_fixtures para false:

config.use_transactional_fixtures = false

É assim que o nosso /spec/rails_helper.rb deve cuidar das modificações e eliminação de comentários:

require 'spec_helper'ENV ||= 'test'require File.expand_path('../config/environment', __dir__)abort('The Rails environment is running in production mode!') if Rails.env.production?require 'rspec/rails'require './spec/support/factory_bot'begin ActiveRecord::Migration.maintain_test_schema!rescue ActiveRecord::PendingMigrationError => e puts e.to_s.strip exit 1endCapybara.register_driver :selenium_chrome do |app| Capybara::Selenium::Driver.new(app, browser: :chrome)endCapybara.javascript_driver = :selenium_chromeRSpec.configure do |config| config.fixture_path = "#{::Rails.root}/spec/fixtures" config.use_transactional_fixtures = false config.infer_spec_type_from_file_location! config.filter_rails_from_backtrace!end

Tambem precisamos instalar o driver cromo-cromo, se você ainda não o tem. Para instalá-lo no Ubuntu, você só precisa executar:

sudo apt-get updatesudo apt-get install chromium-chromedriver

Se você tiver um SO diferente, você pode olhar na página oficial para encontrar as instruções https://chromedriver.chromium.org/downloads.

Alten, já que fizemos muitas coisas sem sequer ter começado um teste ainda, podemos finalmente prosseguir para escrever nossos blocos de teste. Precisamos criar uma pasta chamada features dentro da nossa pasta /spec, e dentro dela, criamos nosso arquivo posts_spec.rb para conter nosso bloco de teste.

/spec/features/posts_spec.rb:

require 'rails_helper'RSpec.describe Post, driver: :selenium_chrome, js: true dodescribe 'the create posts process' do it 'should create a post' do visit new_post_path fill_in 'Title', with: 'Post title' fill_in 'Content', with: 'Post content' click_button 'Create Post' expect(page).to have_content 'Post was successfully created.' end endend

A primeira linha requer a existência do arquivo

rails_helper

e o importa, então como descrito na documentação RSpec.describe use o bloco RSpec.describe para encapsular o código para seu teste, é importante indicar o uso do driver específico, neste caso, o driver

:selenium_chrome

. Também, precisamos habilitar o JavaScript com

js: true

porque o selênio às vezes tem problemas sem ele.

Nosso teste está terminado!

>

>

Mas é claro, ele falhará

>

>

>

porque ainda não implementamos a funcionalidade em nosso projeto. Mas não se preocupe, vamos fazê-lo agora.

Para ir directamente ao nosso objectivo, vamos saltar a estrutura necessária para a criação de um post no mundo real, tal como a pertença de um post a um utilizador. No nosso aplicativo os posts serão criados anonimamente, ou seja, sem nenhum usuário como proprietário.

Para nos poupar alguns minutos criando uma configuração de todo o scaffold necessário para fazer funcionar um simples módulo CRUD, vamos usar o comando scaffold para fazer tudo isso para nós:

$ rails g scaffold Post title content:text

E depois migrar para a base de dados:

$ rails db:migrate

Agora, podemos visitar no nosso navegador

localhost:3000/posts

, que é onde estão listados todos os posts criados na nossa aplicação.

Não estamos tendo nenhum post criado ainda, mas podemos proceder com a criação de um com o nosso teste de capybara apenas executando-o com isto:

$ rspec spec/features/posts_spec.rb

>

Seu navegador vai ser aberto e o formulário preenchido automaticamente

>

>

>

>

Agora que o nosso teste passou, podemos finalmente comemorar!

>

>

Apenas um cuidado final: certifique-se de que isso só acontece com suas aplicações de rubi sobre trilhos, caso contrário, não é a Capybara que está bisbilhotando em seus sites.

E isso é tudo por enquanto pessoas. Espero ter sido útil.

>

Tags

Junte-se ao Hacker Noon

Crie sua conta gratuita para desbloquear sua experiência de leitura personalizada.

Deixe uma resposta

O seu endereço de email não será publicado.