2014-04-30 11 views
5

Questo sembrava essere un flicker di un bug per un po ', ma ora appare in modo coerente: quando eseguo RSpec su una semplice specifica ApplicationHelper, ottengo il seguente errore:RSPec Application Helper Test: variabile locale non definita o metodo `helper`

% rspec --backtrace 
    1) ApplicationHelper renders Markdown from plain text                               
    Failure/Error: expect(helper.md(plaintext)).to eq("<h1 id=\"header\">Header</h1>\n") 
    NameError: 
     undefined local variable or method `helper' for #<RSpec::ExampleGroups::ApplicationHelper_2:0x000001248d1218> 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-expectations-0f7b78587ab4/lib/rspec/matchers.rb:903:in `method_missing' 
    # ./spec/helpers/application_helper_spec.rb:4:in `block (2 levels) in <top (required)>' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:148:in `instance_exec' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:148:in `block in run' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:208:in `call' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:208:in `block (2 levels) in <class:Procsy>' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-rails-480b173c9ad6/lib/rspec/rails/adapters.rb:67:in `block (2 levels) in <module:MinitestLifecycleAdapter>' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:292:in `instance_exec' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:292:in `instance_exec' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/hooks.rb:430:in `block (2 levels) in run' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:208:in `call' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:208:in `block (2 levels) in <class:Procsy>' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/hooks.rb:432:in `run' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/hooks.rb:485:in `run' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:301:in `with_around_example_hooks' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example.rb:145:in `run' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example_group.rb:494:in `block in run_examples' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example_group.rb:490:in `map' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example_group.rb:490:in `run_examples' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/example_group.rb:457:in `run' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/runner.rb:112:in `block (2 levels) in run_specs' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/runner.rb:112:in `map' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/runner.rb:112:in `block in run_specs' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/reporter.rb:49:in `report' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/runner.rb:108:in `run_specs' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/runner.rb:86:in `run' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/runner.rb:70:in `run' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/lib/rspec/core/runner.rb:38:in `invoke' 
    # /Users/danielsh/.rvm/gems/[email protected]/bundler/gems/rspec-core-4219c4786f6f/exe/rspec:4:in `<top (required)>' 
    # /Users/danielsh/Dropbox/Project/Websites/Angular/bin/rspec:20:in `load' 
    # /Users/danielsh/Dropbox/Project/Websites/Angular/bin/rspec:20:in `<main>' 

Ecco il file di specifica completa (spec_helper è incluso come parte del mio file .rspec):

describe ApplicationHelper do 
    it 'renders Markdown from plain text' do 
    plaintext = '# Header' 
    expect(helper.md(plaintext)).to eq("<h1 id=\"header\">Header</h1>\n") 
    end 
end 

Questo stava lavorando fino a poco tempo fa, ma non sono certo quello che ho potuto hanno fatto per rompere una impresa di base Ure. Sto usando le versioni edge di Rails e RSpec, ma non ho visto nulla nei loro repository git per suggerire che helper fosse stato deprecato --- e che ilcontinui a generare un file foo_helper_spec.rb con le istruzioni che indicano che l'helper contiene l'helper stesso. Se qualcuno ha qualche idea, sarei grato per loro!

+0

come stai definendo 'ApplicationHelper'? – sevenseacat

+0

È abbastanza semplice, almeno per quanto posso vedere. Ecco un elenco, dal momento che il commento non prenderà un esempio di codice: https://gist.github.com/anonymous/752547b5c480391893aa – Daniel

risposta

9

Ho creato un nuovo progetto Rails con una nuova installazione di RSpec e mi ha portato al problema. Apparentemente una delle beta recenti ha introdotto una direttiva di configurazione chiamata config.infer_spec_type_from_file_location! che mancava dal mio vecchio file spec_helper; senza di esso, RSpec non stava indovinando il tipo di specifica e mescolando i metodi associati. Attenzione ai cambi di rottura!

+0

Come lo hai risolto? – codenoob

+0

@codenoob Devi aggiungere 'config.infer_spec_type_from_file_location!' Nel tuo file 'spec_helper.rb'. Grazie! @ Daniel! Questo mi ha aiutato – cdpalmer

0

Dal backtrace, non sembra che si stia utilizzando la gemma rspec-rails - solo rspec-core e rspec-expectations.

rspec-rails è ciò che fornisce il metodo helper alle specifiche dell'helper. Da dentro una specifica nella mia base di codice:

(rdb:1) self.method(:helper).source_location 
["/home/becky/.gem/ruby/2.0.0/gems/rspec-rails-2.14.1/lib/rspec/rails/example/helper_example_group.rb", 19] 
+0

Sto avendo problemi simili e quando eseguo quel comando durante il debug del test ottengo: ["/home/vagrant/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/actionpack-4.1.1/lib/abstract_controller/helpers.rb", 110] Ho la gemma rspec-rails inclusa – William

1

Questo è un errore strano !! sei sicuro di aver richiesto spec_helper nelle tue specifiche?

In ogni caso si potrebbe provare senza il metodo helper:

Prima si deve prima aggiungere alla /spec/spec_helper.rb il seguente:

RSpec.configure do |config| 
    ... 
    config.include ApplicationHelper 
end 

Poi test senza helper, quindi sarà:

describe ApplicationHelper do 
    it 'renders Markdown from plain text' do 
    plaintext = '# Header' 
    expect(md(plaintext)).to eq("<h1 id=\"header\">Header</h1>\n") 
    end 
end 
+0

Ciao! Includendo 'ApplicationHelper' e test senza' helper' ha di nuovo reso la suite verde, ma non sono sicuro di cosa indichi. Sto includendo 'spec_helper' in' .rspec', ma aggiungerlo alle specifiche non cambia nulla. – Daniel

4

add :type => :helper modo che il codice dovrebbe essere simile

describe ApplicationHelper, type: :helper do 
... 
end 
Problemi correlati