Rspec , Ruby dili ile yazılmış, ruby kodlarınızın testlerinde kullanılan bir test çatısıdır.
RSpec ile ilk test kodlarımızı yazmaya başlayalım. Bunun için öncelikle rspec kurmalıyız. Dizinimizi yaratıp içine giriyoruz.
mkdir example_rspec
cd exapmle_rspec
gem install rspec
Sonraki komutumuz,
rspec --init
çıktımız ise;
1 2 |
|
Varsayılan olarak .rspec ve spec_helper.rb dosyalarını oluşturuyor.
.rspec gizli dosya olarak oluşturuluyor.
Bu dosya varsayılan olarak configurasyon seçeneklerini içeriyor.
İsterseniz bunları uygulamabilirsiniz veya deiğştirebilirsiniz.
Bu dosyada yer alan bazı seçenekler,
–format progress: Spec çalışmasında ilerlemeyi görüntüler.
–out : belirtilen dosyaya yönlendirme yapar.
–color: terminal çıktısında renk kullanır. Yeşil valid , red invalid testler için kullanılır.
–fail-fast : fail veren ilk testte spec durur.
–format html: Görüntüler html biçiminde bir dosyaya yönlendirilebilir.
Tüm seçeneklere erişmek isterseniz rspec --help
komutunu verebilirsiniz.
Şimdide ana dizinimizin içinde lib dizini oluşturup kodlarımızı yazacağımız ornek.rb dosyası oluşturacağız.
Ayrıca ana dizinimizde spec dizinimizin altında bir lib dizini ve testlerimiz için ornek_spec.rb dosyası oluşturalım.
project source code: mkdir lib -> cd lib -> nano ornek.rb
rspec code: spec/lib/ornek_spec.rb
Burada ornek_rspec.rb
dosyamıza test adımlarımızı yazacağız.
ornek.rb
dosyamıza ise kodumuzun kendisini yazacağız.
Şimdi ornek_spec.rb
dosyamızı açıp içine,
1 2 3 4 5 |
|
describe ile oluturacağımız testi tanımlıyoruz.
it oluşturulan testin tanımını yapıyoruz.
Kodumuzu yazıp kaydediyoruz ve rspec spec/lib/ornek_spec.rb
komutu ile konsolda çalıştırdığımızda çıktımız;
1 2 3 4 5 6 7 |
|
Burada Pending ile Not yet implemented çıktısı alıyoruz, kodumuzda şöyle bir değişiklik yaparsak;
1 2 3 4 5 |
|
Kodumuzu kaydedip rspec spec/lib/ornek_spec.rb
komutuyla tekrar çalıştırırsak,
1
|
|
Uninitialized hatası aldık çünkü Example classımız henüz yok.
Burada önce testi yazıp, çalıştırıp, Fail aldık. Testin verdiği çıktıya göre de yeterli kodumuzu yazıp Faili, Pass edeceğiz. Bu da Test Driven Development (TDD) yapısına uymakta.
Bunun için lib/ornek.rb
dosyamızda,
1 2 |
|
Şimdilik Classımızı oluşturmuş olduk. Test çalıştığında Classı bulamadım hatası vermeyecek.
Bu classı da spec/lib/ornek_spec.rb
dosyamıza haber vereceğiz. Onu da require "example"
komutunu lib/ornek_spec.rb
dosyamıza ekleyerek sağlayacağız, ekledikten sonra;
spec/lib/ornek_spec.rb
komutunu verdiğimizde,
1 2 3 4 5 6 7 |
|
Gördüğünüz gibi hata almadık. Fakat hala implement edilmediğini söylüyor.
Şimdi de spec/lib/ornek_spec.rb
dosyamıza bişeyler dolduralım;
1 2 3 4 |
|
Kodumuz da yeni bir Ornek methodu oluştuğunda ve adının Ornek olmasını istediğimizi söyledik.
Testimiz çalıştığında yeni oluşan örnek methodunun adını kontrol edip bunun ‘Ornek’ olup olmadığını kontrol edecek.
Eğer adı ‘Ornek’ ise testimiz Pass edecek değilse Fail edecek.
Testimizi kaydettikten sonra rspec spec/lib/example_spec.rb
komutunu kullanarak çalıştırıyoruz ve çıktımız,
1 2 3 4 5 6 7 8 |
|
NoMethodError hatamızı aldık. Hatırlarsanız boş bir Class oluşturmuştuk, boş Classa gitti ve Ornek adında bir method bulamadı.
Şimdi kod parçamızdaki Classımızı hatamızı yok edecek şekilde düzenlemeliyiz.
Kırmızıyı yeşile çevirme aşaması. Değişikliklerimizi source kodumuzda yapacağız ki testimiz fail vermesin.
nano lib/ornek.rb
1 2 3 4 5 6 |
|
Testimizi rspec spec/lib/ornek_spec.rb
komutumuzla tekrar calıştırdığımızda,
1 2 |
|
Görüyoruz ki kırmızı yazımız yeşile dönmüş durumda. Testimiz Fail vermedi.