Возможно, оберните MyLibrary.import_all
в ту же самую проверку для $ LOADED_FEATURES, чтобы запускать ее только тогда, когда вы хотите?Или просто проверьте переменную ENV, чтобы вы могли запустить DONT_IMPORT_ALL=true ./bin/rspec whatever
, чтобы избежать импорта?
Ваш вспомогательный файл spec является просто ruby, вы можете поместить в него любую логику ruby.
Ах, но если вы спрашиваете, есть ли способ сделать один повторный прогон, где некоторые тестов находятся в контексте MyLibrary.import_all
беги, а другие нет - на самом деле нет хорошего способа сделать это.Поскольку они оба работают в одном и том же процессе ruby, и MyLibrary.import_all
собирается что-то сделать с этим процессом ruby, и это $ LOADED_FEATURES, и на самом деле не существует какого-либо хорошего способа надежно «отменить» это.
Вам нужно будет запустить спецификации, которые вы хотите включить, и спецификации, которые они не используют в разных прогонах.
Возможно, есть способ настроить один файл спецификаций для запуска независимо от помощника спецификаций?
Конечно, вы тоже можете это сделать - все еще в зависимости отвыше ограничения.
Обычно файлы rspec начинаются с require 'spec_helper'
вверху.Вот почему они работают с помощником спецификаций.Так как это просто ruby, , если в вашем файле спецификаций есть эта строка вверху, он будет включать в себя помощник спецификаций, и нет никакого способа обойти это.Но эта линия сверху не обязательно нужна.
Например, в настоящее время rspec-rails рекомендует (и устанавливает в качестве шаблона) два отдельных файла вспомогательных спецификаций spec_helper.rb
и rails_helper.rb
.spec_helper.rb
включает базовую настройку, которая является общей для любой спецификации, независимо от того, использует она рельсы или нет.Тогда rails_helper.rb
включает в себя только настройки, относящиеся к рельсам, а затем включает require 'spec_helper'
.Так что теперь некоторые из ваших спецификаций будут иметь require 'spec_helper'
вверху (они просто требуют и выполняют общую конфигурацию), а в то время как другие будут иметь require 'rails_helper'
вверху - они выполняют конфигурацию rails и общий конфиг.
Итак, если вы запустите rspec spec/a_file_that_requires_rails_helper.rb
, вы получите последнее;если вы запустите rspec spec/a_file_that_just_requires_spec_helper.rb
, вы получите первое.
Это по-прежнему два разных прогона - все еще нет способа запустить одну командную строку rspec, при которой некоторые спецификации запускаются в контексте (например) инициализации Rails, а другие - нет.Предполагаемая точка этого в рекомендованном случае rspec-rails такова, что вы можете выполнить просто не-rails тестов и иметь speedier время установки без инициализации Rails,
Надеюсь, это поможет.