Aggiungo ulteriori test rspec alla mia app e vorrei testare un modulo ScoringMethods, che si trova in /lib/scoring_methods.rb. Così ho aggiunto una directory/spec/lib e ho aggiunto scoring_methods_spec.rb lì. Ho richiesto spec_helper e impostare il blocco definirei così:L'aggiunta del test rspec per il modulo libreria non sembra prendere in considerazione Aspettative e Matchers
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe ScoringMethods do
describe "should have scorePublicContest method" do
methods = ScoringMethods.instance_methods
methods[0].should match(/scorePublicContest/)
end
end
Ora methods[0]
è una stringa e non c'è nessun problema che corrisponde al nome del metodo pubblico con l'espressione regolare. E il percorso relativo a "spec_helper" è corretto.
Il problema è che l'intera installazione non sembra utilizzare la libreria rspec. eseguire l'esempio rendimenti:
./spec/lib/scoring_methods_spec.rb:7: undefined method `match' for Spec::Rails::Example::RailsExampleGroup::Subclass_1::Subclass_1:Class (NoMethodError)
...
L'intero attesa e di supporto Matcher sembra mancare. Per testare le mie supposizioni, ho modificato una specifica di helper funzionante sostituendo "is_instance_of" a "is_foobar_of". Quel test semplicemente fallisce e dice "is_foobar_of" non è un metodo dell'oggetto mirato; che questa intera gerarchia Spec :: Rails :: Example ... non sia presente.
Ho provato a utilizzare anche altri dispositivi di abbinamento. Ho provato "be_instance_of" e alcuni altri. Sembra che non includa correttamente la libreria rspec.
Infine, ScoringMethods è un modulo, proprio come gli Helpers sono moduli. Quindi ho pensato che sarebbe stato possibile testare un modulo (al contrario delle classi, come Controller e Modelli).
Apprezzerei molto i tuoi pensieri su ciò che ho fatto di sbagliato. Forse c'è un modo più efficace di testare i moduli di libreria? Grazie!
Mark, Grazie mille per aver risposto. Hai assolutamente ragione! Non avevo il blocco "it". Molte grazie, Peter –
Inoltre, grazie per i vostri pensieri sui moduli di test. Il modulo è incluso in una classe per esporre solo i suoi metodi pubblici e non ottenere un elenco enorme di metodi restituiti quando si utilizza la chiamata instance_methods. In questo modo, possiamo aggiungere nuovi metodi pubblici al modulo e sono disponibili per la selezione in elenchi a discesa e simili. Utilizzare lo stesso meccanismo, come suggerito, sarà utile per il test. –
Impressionante, inoltre, non aveva chiuso correttamente il blocco 'it'. –