2011-12-08 9 views
5

Utilizzando rails e rspec è facile avere rspec generare i file necessari per me quando utilizzo il comando rails generate con modelli/viste/controller. Ma ora voglio scrivere le specifiche per un modulo che ho scritto. Il modulo è in /lib/my_module.rb così ho creato una specifica in /spec/lib/my_module_spec.rbcome scrivere/eseguire specifiche per file diversi da model/view/controller

Il problema che sto avendo è che quando cerco di fare rspec spec/ il file my_module_spec.rb viene eseguito, ma il riferimento al mio modulo lib/my_module.rb non può essere trovato. Qual è il modo giusto per farlo?

Cordiali saluti il ​​file my_module_spec.rb non ha require 'spec_helper' in esso già

require 'spec_helper' 

describe "my_module" do 
    it "first test" 
    result = MyModule.some_method # fails here because it can't find MyModule 
    end 
end 
+0

Includete il modulo in my_module_spec.rb? Potresti fornire la fonte? – Jasper

+0

@ Jasper non l'ho fatto. Ma anche io non devo farlo quando lo faccio con modelli/viste/controller. – Brand

+1

richiede il file sorgente del modulo nelle specifiche relative? 'require" # {Rails.root} /lib/my_module.rb "' Ho avuto un problema simile a quello che stai vedendo e questo in congiunzione con la soluzione di Jasper qui sotto mi ha portato dove dovevo essere. – jaydel

risposta

9

Si potrebbe provare compreso il modulo e forse avvolgendolo in un oggetto

require 'spec_helper' 

#EDIT according to 
# http://stackoverflow.com/users/483040/jaydel 
require "#{Rails.root}/lib/my_module.rb" 

describe MyModule do 

    let(:wrapper){ 
    class MyModuleWrapper 
     include MyModule 
    end 
    MyModuleWrapper.new 
    } 

    it "#some_method" do 
    wrapper.some_method.should == "something" 
    end 

end 
0

mettere le seguenti nel file config/application.rb:

config.autoload_paths += %W(#{Rails.root}/lib) 

Ero solo w riattaccando con lo stesso problema, e quanto sopra ha funzionato per me. Non c'è davvero alcun motivo per cui dovresti saltare i cerchi per poter accedere ai tuoi file lib/ da RSpec e scrivere test per loro.

1

Il modulo contiene metodi di classe o metodi di istanza? Ricordate che i metodi della classe solo saranno disponibili tramite

MyModule.some_method 

il che significa che some_method è definito come

def self.some_method 
    ... 
end 

Se il modulo contiene metodi di istanza, quindi utilizzare la soluzione di Jasper sopra. Spero che questo chiarisca.

Problemi correlati