unit-testing - unitarias - rspec rails tutorial
Forma correcta de iniciar las pruebas de la unidad RSpec-títere (1)
Instale el PDK para su plataforma desde su página de descarga . Vuelva a crear el módulo usando pdk new module
, y pdk new class
, o siguiendo la guía .
Ahora, vengo a lo que probablemente sea el problema inmediato de tu código: tu código depende de un módulo de Puppet Forge, puppetlabs/concat
pero no lo has hecho disponible. La plantilla del módulo PDK ya tiene preconfigurada puppetlabs_spec_helper
para cargar accesorios para su módulo.
Para decirle a puppetlabs_spec_helper
que lo obtenga, necesita un archivo .fixtures.yml
con el siguiente contenido:
fixtures:
forge_modules:
stdlib: puppetlabs/stdlib
concat: puppetlabs/concat
Tenga en cuenta que también necesita puppetlabs/stdlib
, porque eso es una dependencia de puppetlabs/concat
.
Si desea explorar más posibilidades de accesorios, consulte los documentos de puppetlabs_spec_helper
.
Con todo esto en su lugar, e integrando las muestras de código y el contenido de prueba que ha publicado en los esqueletos de código inicial proporcionados por el PDLK, todas sus pruebas pasarán ahora cuando ejecute:
$ pdk test unit
Tenga en cuenta que he escrito todo sobre las tecnologías subyacentes, en una publicación de blog, que muestra cómo configurar Rspec-puppet y más desde cero ( ref ), y todavía parece ser la referencia más actualizada sobre este tema.
Para leer más sobre rspec-puppet en general, consulte el sitio oficial rspec-puppet docs .
He creado una clase simple de Puppet 4 y una prueba unitaria para touch metadata.json; rspec-puppet-init
siguiente manera (después de ejecutar touch metadata.json; rspec-puppet-init
en modules/test/
):
# modules/test/manifests/hello_world1.pp
class test::hello_world1 {
file { "/tmp/hello_world1":
content => "Hello, world!/n"
}
}
# modules/test/spec/classes/test__hello_world1_spec.rb
require ''spec_helper''
describe ''test::hello_world1'' do
it { is_expected.to compile }
it { is_expected.to contain_file(''/tmp/hello_world1'')/
.with_content(/^Hello, world!$/) }
end
Puedo ejecutar con éxito la prueba unitaria ejecutando rspec spec/classes/test__hello_world1_spec.rb
mientras rspec spec/classes/test__hello_world1_spec.rb
en modules/test/
.
Ahora me gustaría pasar a una clase un poco más avanzada que utiliza código de otro módulo, a saber, concat
(el módulo ya se ha instalado en modules/concat
):
# modules/test/manifests/hello_world2.pp
class test::hello_world2
{
concat{ "/tmp/hello_world2":
ensure => present,
}
concat::fragment{ "/tmp/hello_world2_01":
target => "/tmp/hello_world2",
content => "Hello, world!/n",
order => ''01'',
}
}
# modules/test/spec/classes/test__hello_world2_spec.rb
require ''spec_helper''
describe ''test::hello_world2'' do
it { is_expected.to compile }
# ...
end
Cuando intento ejecutar esta prueba unitaria con rspec spec/classes/test__hello_world2_spec.rb
mientras rspec spec/classes/test__hello_world2_spec.rb
en modules/test
, recibo un mensaje de error que incluye:
Error / error: se {is_expected.to compile} error durante la compilación: Error de evaluación: error al evaluar un enunciado de recursos, tipo de recurso desconocido: ''concat''
Sospecho que la causa raíz es que rspec
no puede encontrar el otro módulo, porque no se le ha dicho un "modulepath".
Mi pregunta es esta: ¿cómo exactamente se supone que debo comenzar las pruebas unitarias, especialmente aquellas que requieren acceso a otros módulos?