2010-06-12 31 views
15

He la (1.3.0) RSpec tarea siguiente definido en mi Rakefile:¿Por qué mis especificaciones de RSpec se ejecutan dos veces?

require 'spec/rake/spectask' 
Spec::Rake::SpecTask.new(:spec) do |spec| 
    spec.libs << 'lib' << 'spec' 
    spec.spec_files = FileList['spec/**/*_spec.rb'] 
end 

Tengo el siguiente en spec/spec_helper.rb:

require 'rubygems' 
require 'spec' 
require 'spec/autorun' 
require 'rack/test' 
require 'webmock/rspec' 

include Rack::Test::Methods 
include WebMock 

require 'omniauth/core' 

que tienen una especificación única declarada en spec/foo/foo_spec.rb:

require File.dirname(__FILE__) + '/../spec_helper' 

describe Foo do 
    describe '#bar' do 
    it 'be bar-like' do 
     Foo.new.bar.should == 'bar' 
    end 
    end 
end 

Cuando ejecuto rake spec, el ejemplo único se ejecuta dos veces. Puedo verificarlo haciendo que el ejemplo falle, dándome dos "F" rojas.

Una cosa que pensé fue que agregar spec al SpecTask 's libs provocaba que se definieran doblemente, pero eliminar eso no parece tener ningún efecto.

Respuesta

2

No sé si esto soluciona el problema, pero se puede utilizar en lugar de require 'spec_helper'require File.dirname(__FILE__) + '/../spec_helper'

Además, se 'spec/autorun'require 'spec' para usted.

Lo único que se me ocurre es que tiene dos tareas de especificación definidas en su sistema. ¿Es esta una aplicación de rieles? Si es así, asegúrese de no estar duplicando una tarea de rake que ya existe en lib/rake/tasks.

HTH, David

+0

No es una aplicación de Rails, por lo que ese no es el problema. Solo puedo hacer 'require 'spec_helper'' si mi' $ LOAD_PATH' ya está configurado, pero si quiero ejecutar una única especificación, '$ LOAD_PATH' no se establecerá hasta dentro de' spec_helper.rb'. –

3

Esto no está directamente relacionada con la cuestión, ya que al parecer se refiere a las versiones RSpec de 2 en adelante, pero como el título de la cuestión es la misma que me trajo aquí, menciono a otros que podría encontrar esta página por la misma razón, que tener rspec.rake en su lib/tasks puede hacer que el rake spec ejecute todas las pruebas de especificación dos veces. La eliminación de ese archivo me ha ayudado (como se sugirió en: http://www.patrickgannon.net/post/519eed022c17433fc8000018/rake-runs-rspec-tests-twice)

19

he tenido este problema utilizando Zeus, y la eliminación de require 'rails/autorun' de mi spec_helper.rb se detuvo para mí

+0

No tengo esta línea y sigo teniendo este problema. ¿Alguna otra idea? –

+1

El mejor consejo que puedo darte en este momento es actualizar a los rieles 4.1 y obtener Spring integrado, lo que te permitirá dejar de usar Zeus por completo. –

+0

Me lo arreglaron, gracias. :) – Gerry

1

otra causa, también en el spec_helper.rb es utilizando el siguiente código:

RSpec.configure do |config| 
    #config stuff 
end 

Las pruebas se realizaron solo una vez después de eliminar este código.

+0

[Tuve el código de configuración donde tiene el comentario] (http://i.imgur.com/sApPy0a.png). Eliminarlo hizo que mis pruebas se ejecutaran una vez. No estoy seguro por qué. Parece que necesitaré usar '~/.rspec' en su lugar. – Dennis

8

Las configuraciones de duplicación en spec_helper.rb y .rspec causaban que mis pruebas se ejecutaran dos veces.

p. Ej.

.rspec

--color 

spec_helper.rb

Rspec.configure do |config| 
    config.color = true 
end 

Por lo tanto, parece duplicar la prueba cuando usted tiene el mismo Configure el ajuste de duplicar en .rspec y spec_helper.rb

+0

Tener el archivo '.rspec' solo hizo que se ejecutara dos veces, ni siquiera necesitaba las configuraciones duplicadas –

+0

Tenía' --color' y '--format d' en mi' ~/.rspec' y 'config. color = true' y 'config.formatter =: documentation' en mi código. Tuve que deshacerme de los duplicados para no tener rspec ejecutándose dos veces (no importaba si lo eliminaba del código o archivo de configuración). – dentarg

+0

Más información: "Está agregando dos formateadores, por lo que obtiene el doble de la salida", dice el propietario de rspec en https://github.com/rspec/rspec-core/issues/1929#issuecomment-90771361 – dentarg

5

resulta Carriles tiene tarea por defecto spec, por lo que si usted está utilizando los carriles, la solución al problema sería la de eliminar tarea predefinida y luego volver a inicializar la lógica personalizada, así:

# ... beginning of Rails Rakefile 
Rails.application.load_tasks 

Rake::Task["spec"].clear 

RSpec::Core::RakeTask.new(:spec) do |t| 
    # your logic here 
end 
1

Observé algo similar. Pero en mi caso no es que las pruebas se ejecutaron dos veces, sino que se imprimieron dos veces.

La razón de esto, descubrí, es que alias rspec a rspec -f d -c (formato de documentación y color).

Y el spec_helper.rb contiene

config.color = true 
config.formatter = :documentation 

Así que, esencialmente esta información se duplica. Después de ejecutar unalias rspec, vuelvo a ejecutar mis pruebas, el problema está solucionado.

También puede tener un archivo que contiene información .rspec similar:

--format d 
--color 

Esto también podría dar lugar a la duplicación. Así que modifique o mueva este archivo.

Cuestiones relacionadas