2012-04-07 12 views
17

Sto cercando di imparare rspec. Non riesco a testare un metodo di controllo delle rotaie. Quando chiamo il metodo nel test, rspec restituisce solo un errore del metodo non definito. Qui è il mio esempio di provacome faccio a testare il metodo del controller usando rspec?

it 'should return 99 if large' do 
    GamesController.testme(1000).should == 99 
end 

e qui è l'errore:

Failure/Error: GamesController.testme(1000).should == 99 
NoMethodError: 
    undefined method `testme' for GamesController:Class 

Ho un metodo di TestMe nel GamesController. Non capisco perché il codice di test non possa vedere i miei metodi.

Qualsiasi aiuto è apprezzato.

+0

si tratta di un privato e metodo? – plainjimbo

risposta

4

si tenta di verificare metodo di classe, ma di controllo ha metodo di istanza

È necessario GamesController.new.testme(1000).should == 99

O anche GamesController.new.send(:testme, 1000).should == 99, perché, come credo, questo non è il metodo di azione, ma privato o protetto.

metodi di azione sono testati this way

+0

OK. Ora lo vedo. La differenza tra i metodi di classe e di istanza è una sottigliezza che mi sfugge. Come puoi dire, sono ancora nuovo per rubino e rotaie. A proposito, il link alla documentazione di rspec-rails è buono. Non ero a conoscenza di quella risorsa. Grazie. –

25

Penso che il modo corretto è questo:

describe GamesController do 
    it 'should return 99 if large' do 
    controller.testme(1000).should == 99 
    end 
end 

In una specifica di controllo rotaie, quando si mette la classe controller in describe, è possibile utilizzare controller metodo per ottenere un'istanza: P
Ovviamente, se testme metodo è privato, è ancora necessario utilizzare controller.send :testme

+0

Grazie mille - questo è sorprendentemente difficile da trovare nei documenti – Andy

Problemi correlati