2011-04-13 6 views
7

Hay muchos ejemplos sobre cómo realizar pruebas con javascript Carpincho/selenio/Rspec en el que se puede escribir una prueba de este modo:¿Cómo se realizan las pruebas de javascript con Minitest, Capybara, Selenium?

it "does something", :js => true do 
    ... 
end 

Sin embargo, con minitest no se puede pasar de una segundo parámetro para instruir al selenio para realizar la prueba.

¿Alguien tiene alguna idea sobre cómo se puede hacer esto?

+0

Cómo usar Js en Test :: Unit es [ahora cubierto en los documentos] (https://github.com/jnicklas/capybara/blob/4161bbc560631e61e611d59bf797eeb59a6b1021/README.md#using-capybara-with-testunit). Dice usar las respuestas actuales 'Capybara.current_driver =' como respuestas actuales. –

Respuesta

0

Hmm me di cuenta de un par de líneas en los documentos que parecen decir que lo anterior sólo puede hacerse en Rspec

Sin embargo, si está utilizando RSpec o pepino, en su lugar puede que desee considerar dejar la más rápido :rack_test como default_driver, y marca solo las pruebas que requieren un controlador compatible con JavaScript using :js => true o @javascript, respectivamente.

+2

No puede especificar: js => true en el '' 'it" debería hacer este "do''' nivel en minitest. Solo en el bloque principal '' 'describe'''. – AKWF

-1

https://github.com/wojtekmach/minitest-metadata parece haber proporcionado una solución para esto.

Usted puede hacer lo siguiente:

describe "something under test" do 
    it "does not use selenium for this test" do 
    visit "/" 
    assert body.has_content?("Hello world") 
    end 

    it "does use selenium for this test", :js => true do 
    visit "/" 
    click_link "Hide" # a link that uses a javascript click event, for example 
    assert body.has_no_link?("Hide") 
    end 
end 
+0

minitest-capybara en realidad no ofrece esta característica – sambehera

+0

necesita usar minitest-metadata para eso – sambehera

17

Lo :js bandera está haciendo es muy simple. Cambia el controlador actual del predeterminado (prueba en rack) a otro que admite la ejecución de javascript (selenium, webkit). Se puede hacer lo mismo en minitest:

require "minitest/autorun" 

class WebsiteTest < MiniTest::Unit::TestCase 
    def teardown 
    super 
    Capybara.use_default_driver 
    end 

    def test_with_javascript 
    Capybara.current_driver = :selenium 
    visit "/" 
    click_link "Hide" 
    assert has_no_link?("Hide") 
    end 

    def test_without_javascript 
    visit "/" 
    click_link "Hide" 
    assert has_link?("Hide") 
    end 
end 

Por supuesto puede abstracta esto en un módulo por conveniencia:

require "minitest/autorun" 

module PossibleJSDriver 
    def require_js 
    Capybara.current_driver = :selenium 
    end 

    def teardown 
    super 
    Capybara.use_default_driver 
    end 
end 

class MiniTest::Unit::TestCase 
    include PossibleJSDriver 
end 

class WebsiteTest < MiniTest::Unit::TestCase 
    def test_with_javascript 
    require_js 
    visit "/" 
    click_link "Hide" 
    assert has_no_link?("Hide") 
    end 

    def test_without_javascript 
    visit "/" 
    click_link "Hide" 
    assert has_link?("Hide") 
    end 
end 
0

Sólo para actualizar alguna información, hay una más potente selenio WebDriver con Ruby Bindings ahora.

la prueba del JavaScript en Firefox desde la terminal rápidamente con los carriles 4 y selenio WebDriver, que tiene que hacer los 4 pasos a continuación:

  1. Añadir joya a su Gemfile

    joya 'selenio WebDriver ' gem '' MINITEST-carriles

  2. instalación joya

    paquete de instalación

  3. generar casos de prueba (Ref: Official Guide)

    bin/rieles generan integration_test your_case_name

  4. empezar a escribir código de prueba en el caso de test. En realidad se puede escribir en el rubí sin capibara, escribir caso de Carpincho le puede referir a Capybara at Github

muestra Minitest:

# create a driver 
driver = Selenium::WebDriver.for :firefox 
# navigate to a page 
driver.navigate.to 'url_to_page' 
# get element with class box 
box = driver.find_element(:css, '.box') 

# check width 
# get width by execute JavaScript 
assert_equal 100, driver.execute_script('return $(arguments[0]).width()', box) 

Actualmente parece que la falta de recursos con respecto a la forma de trabajar con selenium-webdriver, servidor de CI (Jenkins) y Rails minitest sin problemas, he creado un proyecto simple y espero que pueda ayudar a cualquiera a comenzar rápida y fácilmente: Rails Selenium Working Case

También aprecio los comentarios que me permiten hacer una mejor respuesta.

+0

Esto teóricamente puede responder la pregunta, pero sería mejor incluir las partes esenciales de la respuesta aquí para futuros usuarios, y proporcionar el enlace para referencia. [Respuestas dominadas por el enlace] (// meta.stackexchange.com/questions/8231) pueden dejar de ser válidas a través de [link rot] (// en.wikipedia.org/wiki/Link_rot). – Mogsdad

+0

Solo el enlace a su propia biblioteca no es una buena respuesta. Vincularse a él, explicar por qué soluciona el problema, proporcionar código usando la biblioteca para hacerlo y negarlo hace una mejor respuesta. Ver: [** ¿Qué significa "buena" autopromoción? **] (http://meta.stackexchange.com/q/182212/200235) – durron597

Cuestiones relacionadas