Estoy usando guard-minitest para ejecutar automáticamente mis pruebas.

También tengo una gema esqueleto dentro del directorio test/fixtures.

El problema es que ahora Guard también está ejecutando las pruebas en la gema esquelética.

¿Cómo puedo decirle a Guard que solo ejecute mis pruebas para mi proyecto real y no cualquier proyecto en el directorio test/fixtures?

He intentado lo siguiente, pero no funciona:

guard :minitest, :exclude => "test/fixtures/*" do
  # with Minitest::Unit
  watch(%r{^test/(.*)\/?test_(.*)\.rb$})
  watch(%r{^lib/(.*/)?([^/]+)\.rb$})     { |m| "test/#{m[1]}test_#{m[2]}.rb" }
  watch(%r{^test/test_helper\.rb$})      { 'test' }
end

Editar:

Los docs hacen que parezca que puedo agregar una ruta de ignorar, esto también no no funciona:

ignore %r{^test/fixtures/}

guard :minitest do
  watch(%r{^test/(.*)\/?test_(.*)\.rb$})
  watch(%r{^lib/(.*/)?([^/]+)\.rb$})     { |m| "test/#{m[1]}test_#{m[2]}.rb" }
  watch(%r{^test/test_helper\.rb$})      { 'test' }
end

Editar:

Como se recomienda a continuación, intenté eliminar el asterisco, tampoco funciona:

ignore %r{^test/fixtures/}

guard :minitest do
  watch(%r{^test/test_(.*)\.rb$})
  watch(%r{^lib/(.*/)?([^/]+)\.rb$})     { |m| "test/#{m[1]}test_#{m[2]}.rb" }
  watch(%r{^test/test_helper\.rb$})      { 'test' }
end
2
mbigras 22 dic. 2016 a las 23:39

3 respuestas

La mejor respuesta

Cree un directorio más específico, agregue una expresión regular de observador más específica y agregue las opciones test_folders: documentos

Este es mi archivo de guardia de trabajo y dir de prueba:

guard :minitest, test_folders: 'test/real' do
  watch(%r{^test/real/(.*)\/?test_(.*)\.rb$})
  watch(%r{^lib/(.*/)?([^/]+)\.rb$})     { |m| "test/real/#{m[1]}test_#{m[2]}.rb" }
  watch(%r{^test/test_helper\.rb$})      { 'test/real' }
end

Estructura dir:

$ tree -L 2 test
test
├── fixtures
│   └── newgem
└── real
    ├── devify
    ├── test_devify.rb
    └── test_helper.rb

4 directories, 2 files
0
mbigras 25 ene. 2017 a las 21:58

Esto sucede porque watch(%r{^test/(.*)\/?test_(.*)\.rb$}) usa una expresión regular que coincide con las pruebas del esqueleto de la gema. Entonces, si tiene estos archivos:

test/my_real_tests/test_one.rb
test/my_real_tests/my_gem/test_two.rb

/my_real_tests/my_gem/ coincide con el primero (.*).

Agregue una expresión regular más concreta para que no coincidan. Algo así como watch(%r{^test/my_real_tests\/?test_(.*)\.rb$}). O simplemente elimine (.*).

Aquí está la documentación sobre cómo {{X0 }} trabajos.

Además: ¿Por qué hay un esqueleto de gema en test/fixtures? Parece extraño :)

1
dgmora 23 dic. 2016 a las 11:12

Me encontré con este mismo problema y descubrí que agregar una estructura de carpeta señuelo como las dos respuestas sugeridas es un poco extraño.

Una mejor solución IMO es modificar su expresión regular para negar la carpeta de accesorios:

watch(%r{^test/(?!fixtures)(.*)\/?test_(.*)\.rb$})

0
Justin 4 may. 2018 a las 03:43