Estoy agregando más pruebas rspec a mi aplicación y me gustaría probar un módulo ScoringMethods, que está en /lib/scoring_methods.rb. Así que agregué un directorio/spec/lib y agregué scoring_methods_spec.rb allí. ¿Se requiere spec_helper y configurar el bloque de describir como tan:Agregar la prueba rspec para el módulo de la biblioteca no parece recoger Expectativas y 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
Ahora methods[0]
es una cadena y no hay ningún problema que coincida con el nombre de método público con la expresión regular. Y la ruta relativa a "spec_helper" es correcta.
El problema es que toda la instalación no parece utilizar la biblioteca rspec. Ejecución de los rendimientos ejemplo:
./spec/lib/scoring_methods_spec.rb:7: undefined method `match' for Spec::Rails::Example::RailsExampleGroup::Subclass_1::Subclass_1:Class (NoMethodError)
...
La totalidad de las expectativas y de apoyo Matcher parece que falta. Para probar mi suposición, cambié una especificación auxiliar de trabajo reemplazando "is_instance_of" a "is_foobar_of". Esa prueba simplemente falla y dice "is_foobar_of" no es un método del objeto específico; eso, toda esta jerarquía de Spec :: Rails :: Example ... no está presente.
He intentado utilizar otros mezcladores también. He intentado "be_instance_of" y algunos otros. Parece que no estoy incluyendo la biblioteca rspec correctamente.
Finalmente, ScoringMethods es un módulo, del mismo modo que los Helpers son módulos. Así que pensé que sería posible probar un módulo (a diferencia de las clases, como Controladores y Modelos).
Agradecería mucho sus ideas sobre lo que he hecho mal. Tal vez haya una forma más efectiva de probar los módulos de la biblioteca. ¡Gracias!
Marca, Muchas gracias por responder. ¡Estás absolutamente en lo correcto! No tenía el bloque "it". Muchas gracias, Peter –
Además, gracias por su opinión sobre los módulos de prueba. El módulo está incluido en una clase para exponer solo sus métodos públicos y para no obtener una gran lista de métodos devueltos al usar la llamada a métodos_instancia. De esta forma, podemos agregar nuevos métodos públicos al módulo y están disponibles para su selección en listas desplegables y similares. Usar el mismo mecanismo, como sugiere, será útil para las pruebas. –
Awesome, también no había cerrado correctamente el bloque 'it'. –