2012-01-14 20 views
51

mio java applicazione web è in esecuzione su Tomcat a http://localhost:8080/Visita metodo non trovato nel mio rspec

scrivere il mio primo spec, home_spec:

require 'spec_helper' 


describe "home" do 

    it "should render the home page" do 
     visit "/" 

     page.should have_content("hello world") 
    end 

end 

e funzionante:

rspec 

Ottengo:

F 

Failures: 

    1) home should render the home page 
    Failure/Error: visit "/" 
    NoMethodError: 
     undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x242870b7> 
    # ./spec/home/home_spec.rb:7:in `(root)' 

Finished in 0.012 seconds 
1 example, 1 failure 

Failed examples: 

rspec ./spec/home/home_spec.rb:6 # home should render the home page 

Non dovrebbe funzionare perché ho incluso capybara nello spec_helper?

Come farà a sapere l'URL corretto? cosa succede se il mio url è localhost: 3030 o localhost: 8080?

mio Gemfile:

source 'http://rubygems.org' 

gem "activerecord" 
gem "rspec" 
gem "capybara" 
gem "activerecord-jdbcmysql-adapter" 

mio spec_helper:

require 'capybara/rspec' 

risposta

6

Di default il DSL capibara è incluso automaticamente se il file è in spec/richieste, spec/integrazione o se il gruppo esempio ha :type => :request.

Poiché il file è in specifica/home, gli helper capybara non vengono inclusi. Puoi essere conforme ad uno dei modelli di cui sopra o l'aggiunta di include Capybara::DSL dovrebbe anche fare il trucco (si potrebbe anche bisogno di replicare alcune delle cose before(:each) che sarebbe messa a punto.)

+0

ho rinominato spec/home/home_spec.rb a spec/richieste/home_spec. rb e non ha cambiato nulla. aggiungendo l'inclusione ora ottengo: 'test del rack richiede un'applicazione rack, ma nessuna è stata data' – Blankman

+0

dovrei mettere una cartella per il supporto all'interno della cartella delle richieste? Ad esempio /spec/requests/support/env.rb? – Blankman

+0

Ah, mi mancava il fatto che non stavi testando un'app per rails. Avresti almeno bisogno di impostare il driver capybara sul selenio, ma a parte questo non sono sicuro che –

1

First check it out

Se non sei successo ,

aggiungere questo codice tua fine del vostro aiutante specifiche realtà fuori del blocco RSpec.configure così

module ::RSpec::Core 
    class ExampleGroup 
    include Capybara::DSL 
    include Capybara::RSpecMatchers 
    end 
end 
134

Riguardo alle questioni RSpec (https://github.com/rspec/rspec-rails/issues/360)

si dovrebbe mettere

config.include Capybara::DSL 

in spec_helper.rb, all'interno del blocco di configurazione.

+3

Anche questo ha funzionato per me. – Aaron

+1

Questo lo ha risolto per me in un'applicazione Rails 3.2.9. Mi chiedo davvero quale sia il vero problema. Mi chiedo se '--no-test-unit' quando crei un'app per rails influenzi questo come. –

+0

Grazie. Questo ha funzionato per me. – n8gard

23

La directory predefinita che Capybara::RSpec ora guarda per includere il Capybara::DSL e Capybara::RSpecMatchers è cambiato requests-features.

Dopo aver rinominato la mia directory requests in features ho nuovamente disponibili i metodi di corrispondenza e DSL senza doverli includere esplicitamente.

vedere il seguente commit

+0

Grazie e buona spiegazione. – hbin

+1

anche rinominare il "descrivere" a "funzionalità" –

+0

Grande spiegazione. Grazie. Ma invece di cambiare il nome della directory, ho seguito la soluzione di @ egezer. Entrambe le opere. – PriyankaK

9

anche assicurarsi che le prove sono in /spec/caratteristiche directory.Secondo rspec-rails and capybara 2.0, Capybara v2 e versioni successive non saranno disponibili per impostazione predefinita nelle specifiche richieste RSpec. Suggeriscono di "... spostare qualsiasi test che usi capibara da specifiche/richieste a specifiche/caratteristiche".

-1

1) Aggiungere alla config 'rails_helper':

config.include Capybara::DSL 
config.include Capybara::RSpecMatchers 

And comment out the `require 'spec_helper'` line. 

2) Aggiungere alla 'spec_helper':

require 'rails_helper' 
Problemi correlati