Ответ 1
У меня была эта проблема с помощью zeus, и удаление require 'rails/autorun'
из моего spec_helper.rb
остановило его для меня
У меня есть следующая задача RSpec (1.3.0), определенная в моем Rakefile
:
require 'spec/rake/spectask'
Spec::Rake::SpecTask.new(:spec) do |spec|
spec.libs << 'lib' << 'spec'
spec.spec_files = FileList['spec/**/*_spec.rb']
end
В 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'
У меня есть одна спецификация, объявленная в 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
Когда я запускаю rake spec
, один пример выполняется дважды. Я могу проверить это, сделав пример неудачным, давая мне два красных "F" s.
Я подумал, что добавление spec
в SpecTask
libs
приводит к тому, что они должны быть двузначными, но удаление, похоже, не имеет никакого эффекта.
У меня была эта проблема с помощью zeus, и удаление require 'rails/autorun'
из моего spec_helper.rb
остановило его для меня
Конфигурации дублирования в spec_helper.rb и .rspec приводили к тому, что мои тесты выполнялись дважды.
например.
.rspec
--color
spec_helper.rb
Rspec.configure do |config|
config.color = true
end
Таким образом, похоже, что он дублирует тест, если у вас есть тот же самый параметр конфигурации, который дублируется в .rspec и spec_helper.rb
Выключает Rails имеет задание по умолчанию spec
, поэтому, если вы используете Rails, решение проблемы будет состоять в очистке предопределенной задачи и повторной инициализации вашей пользовательской логики, например:
# ... beginning of Rails Rakefile
Rails.application.load_tasks
Rake::Task["spec"].clear
RSpec::Core::RakeTask.new(:spec) do |t|
# your logic here
end
Это напрямую не связано с вопросом, поскольку это, по-видимому, относится к версиям Rspec начиная с 2-го, но поскольку название вопроса такое же, что и привело меня сюда, я упоминаю другим, которые могут найти эту страницу по той же причине, что наличие rspec.rake
в lib/tasks
может привести к тому, что rake spec
будет запускать все тесты спецификации дважды. Удаление этого файла помогло мне (как было предложено по адресу: http://www.patrickgannon.net/post/519eed022c17433fc8000018/rake-runs-rspec-tests-twice)
Не знаю, исправляет ли эта проблема, но вы можете использовать require 'spec_helper'
вместо require File.dirname(__FILE__) + '/../spec_helper'
Кроме того, 'spec/autorun'
будет require 'spec'
для вас.
Единственное, что я могу придумать, это то, что у вас есть две задачи спецификации, определенные в вашей системе. Это приложение для рельсов? Если да, убедитесь, что вы не дублируете задачу рейка, которая уже существует в lib/rake/tasks
.
НТН, Дэвид
Я наблюдал подобное. Но в моем случае это не то, что тесты выполнялись дважды, они дважды печатались.
Причиной этого я узнал, что я с псевдонимом rspec
до rspec -f d -c
(документация по форматированию и цвет).
И spec_helper.rb содержит
config.color = true
config.formatter = :documentation
Таким образом, эта информация дублируется. После запуска unalias rspec
я снова запускаю свои тесты, проблема исправлена.
У вас также может быть файл .rspec, который содержит аналогичную информацию:
--format d
--color
Это также может привести к дублированию. Поэтому измените или переместите этот файл.
Другая причина, также в spec_helper.rb используется следующий код:
RSpec.configure do |config|
#config stuff
end
Тесты выполнялись только один раз после удаления этого кода.
У нас была эта проблема сегодня в моей компании, и она была здесь не упомянута по другой причине: мы автоматически загружали некоторые файлы, которые содержали тестовую логику. Затем они запускались, когда код требовался в первую очередь:
# Require support, concerns, lib, validators dirs
%w(support concerns lib).each do |dir|
Dir[Rails.root.join("spec/#{dir}/**/*.rb")].each { |f| require f }
end
Решением является удаление кода автозагрузки. Этот вид кода в тестах Rails + не очень обычен и обычно указывает на плохую файловую структуру.