TDD‘ye bulaşmayı pek çok insan istemiyor ama işin içindeki mantığı çözünce de ciddi anlamda yararını görmek mümkün. Özellikle Ruby-Rails eğitiminde az da olsa gördüğüm RSpec çalışması dikkatimi çekti bu konuda. Kendim de araştırıp daha da üstüne gidince, ne kadar önemli bir olgu olduğu konusunda az da olsa bir fikir edinebildim 🙂
RSpec’le ilgili başta sevmediğim şeylerden birisi tek tek testleri çalıştırmakdı. RoR örneklerini çalıştığım sitede, burası, Guard adlı bir gem ile işleri otomatiğe bağlamayı öğrendim. Hatta Ubuntu için bir bildirim gemi de koyunca, tadından yenmedi diyebilirim. Guard’ı kurmak için öncelikle Gemfile dosyasına gerekli bazı gemleri eklemek gerekiyor:
1 2 3 4 5 6 7 8 9 10 11 12 13 | group :development, :test do gem 'sqlite3', '1.3.7' gem 'rspec-rails', '2.13.1' gem 'guard-rspec', '2.5.0' ... ... end group :test do ... ... gem 'libnotify', '0.8.0' # Sadece Ubuntu için end |
Ardından gemleri kurması için gerekli komutumuzu çalıştıralım:
1 | $ bundle install |
Şimdi ise Guard sistemini projeye dahil etmemiz lazım:
1 | $ bundle exec guard init rspec |
Yapılandırma dosyasına izlenecek klasörleri dahil etmemiz gerekiyor. Ana klasördeki Guardfile dosyasını açın ve direkt olarak ortadaki Rails bölgesini bununla değişirin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | watch(%r{^app/(.+).rb$}) { |m| "spec/#{m[1]}_spec.rb" } watch(%r{^app/(.*)(.erb|.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" } watch(%r{^spec/support/(.+).rb$}) { "spec" } watch('config/routes.rb') { "spec/routing" } watch(%r{^app/controllers/(.+)_(controller).rb$}) do |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb", (m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" : "spec/requests/#{m[1].singularize}_pages_spec.rb")] end watch(%r{^app/views/(.+)/}) do |m| (m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" : "spec/requests/#{m[1].singularize}_pages_spec.rb") end watch(%r{^app/controllers/sessions_controller.rb$}) do |m| "spec/requests/authentication_pages_spec.rb" end |
Bundan sonraki adım Guard’ı çalıştırmak oluyor. Proje klasöründe bir terminal penceresi açın ve aşağıdaki komutu verin:
1 | $ bundle exec guard |
Bu kadar 🙂 Peki ne yaptık ve ne olacak? Öncelikle Guard gemini projeye dahil ettik. Ardından yapılandırma dosyasını, belli klasörleri ve dosyaları izlemesi için düzenledik. Ve sistemi çalıştırdık. Bundan sonraki süreçte, Guard yapılandırma dosyasına kayıtlı olan klasörleri ve dosyaları izlemeye alıyor ve en ufak bir değişiklikte otomatik olarak RSpec’i çalıştırıyor. Eğer Ubuntu için gerekli gemi de kurarsanız, test sonucu şöyle güzel bir uyarı ile çıkıyor karşınıza:
Test başarısız geçerse: