Есть ли способ настроить охрану, чтобы не запускать спецификации запросов? - PullRequest
5 голосов
/ 25 февраля 2012

Я использую охрану для запуска всех своих спецификаций на рельсы и это круто. Я написал кучу спецификаций запросов, которые используют капибару и селен для тестирования javascript-кодов моих страниц, открыв firefox, и они также потрясающие, однако они, как правило, медленные и отвлекают внимание от моего редактора, пока я печатаю.

Есть ли способ настроить guard, чтобы он не запускал мои спецификации запросов, когда он запускает все, и, возможно, назначил горячую клавишу, чтобы просто запустить спецификации запросов?

Ответы [ 2 ]

6 голосов
/ 26 февраля 2012

Отвечая на мой собственный вопрос, если другие сталкиваются с этим:

rspec-rails может передавать аргументы командной строки в rspec через: cli. Кроме того, примеры могут быть помечены в файлах спецификаций, а затем можно запустить rspec, чтобы включить или исключить эти помеченные примеры.

Оказывается, я уже помечаю примеры, которые я хотел исключить, с помощью: js => true, именно так вы получаете Selenium для запуска firefox.

describe "Post" do
  it "should be able to edit a post", :js=>true do
    # your test here
  end
end

Я сделал две группы в своем Guardfile: одну для спецификаций без javascript с помощью: cli => "-t ~ js" и другую для спецификаций, которые тестируют javascript с помощью: cli => "-t js". Я также передал в: all_after_pass => false для группы javascript.

вот мой новый файл охраны:

group 'none-javascript specs' do
  guard 'rspec', :version => 2, :cli => '-r rspec/instafail -f RSpec::Instafail -t ~js'  do

   watch(%r{^spec/.+_spec\.rb$})
   watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
   watch('spec/spec_helper.rb')  { "spec" }

   # Rails example
   watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
   watch(%r{^app/(.*)(\.erb|\.haml|\.jbuilder)$})      { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
   watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
   watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
   watch('config/routes.rb')                           { "spec/routing" }
   watch('app/controllers/application_controller.rb')  { "spec/controllers" }

   watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/requests/#{m[1]}_spec.rb" }
  end
end

group 'javascript specs' do
  guard 'rspec', :version => 2, :all_after_pass => false, :cli => '-r rspec/instafail -f RSpec::Instafail -t js' do

    watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/requests/#{m[1]}_spec.rb" }
    watch(%r{^spec/requests/.+_spec\.rb$})
  end
end

Теперь, когда я запускаю сторож или возвращаюсь в защитный термин, обе группы запускаются, выполняя все спецификации.

Guard::RSpec is running, with RSpec 2!
Running all specs
Run options: exclude {:js=>true}
...
Finished in 75.78 seconds
428 examples, 0 failures, 1 pending

Guard::RSpec is running, with RSpec 2!
Running all specs
Run options: include {:js=>true}
...
Finished in 63.68 seconds
22 examples, 0 failures

После всех прохождений теста запускаются только примеры без javascript.

5 голосов
/ 12 марта 2013

Существует опция exclude для guard-rspec. Он был реализован в # 23 , но не был задокументирован в README . Я сделал запрос на извлечение, чтобы документально подтвердить, что .

Пример

guard 'rspec', :exclude => "spec/foo/**/*"  # exclude files based on glob
...