RSpec, Ruby için yazılmış bir test frameworküdür. RSpec, kodumuzun doğru ve beklenilen şekilde çalıştığından emin olmak için kullanabileceğimiz bir araçtır. RSpec, testleri yazarken okunaklı ve anlaşılır hale getirmek için BDD (Behavior Driven Development - Davranış Odaklı Geliştirme) yöntemini kullanır. Bu yöntem, kodun nasıl davranması gerektiğini ve ne yapması gerektiğini açık bir şekilde tanımlar. RSpec, Ruby dili için yazılmıştır ve Rails uygulamalarının testlerini yazmak için popülerdir.
- Describe kullanımı
- Context kullanımı
- It kullanımı
- Expect kullanımı
- Let kullanımı
- RSpec çıktı formatları
- Kaynaklar
RSpec tarafından test edilen sınıf veya metodun tanımını yapar.
describe HelloWorld do
.
.
.
endBest practice kullanım için class methodlarının test edilmesinde uzun uzun açıklama yazmak yerine "." ön eki kullanılırken, instance methodların test edilmesinde "#" ön eki kullanılmalıdır.
# wrong
describe "the authenticate method for User" do
describe "the save method for User" do
# correct
describe ".authenticate" do
describe "#save" doTestlerin daha rahat okunabilirliği için bir alt kategori oluşturur. Örnek olarak, context 'when user is admin' kullanılırsa, sadece admin olan kullanıcılar için testler yapılmaktadır.
# wrong
describe User do
it "should save when name is not empty" do
...
end
it "should not save when name is empty" do
...
end
it "should not be valid when name is empty" do
...
end
it "should be valid when name is not empty" do
end
end
# correct
describe User do
context "when name is empty" do
it "should not be valid" do
...
end
it "should not save" do
...
end
end
context "when name is not empty" do
it "should be valid" do
...
end
it "should save" do
...
end
end
endTestlerin tanımını yapar. Örnek olarak, it 'should be valid' kullanımı, test edilen sınıfın geçerli olup olmadığını test etmektedir.
describe User do
context "when name is empty" do
it "should not be valid" do
...
end
it "should not save" do
...
end
end
endTestin beklentisini tanımlar. Örnek olarak, expect(user.admin?).to be true kullanılırsa, kullanıcının admin olduğunun doğruluğu test edilmektedir.
describe "Number" do
it "should be positive" do
number = 5
expect(number).to be > 0
end
endBu test, sayının 0'dan büyük olmasını bekler ve eğer sayı 0'dan büyükse test başarılı olarak sonuçlandırılır. Aksi halde, test başarısız olarak sonuçlandırılır.
to ve be testin beklentisini tanımlayan expect metodunun bir parçasıdır.
let metodunu kullanarak testlerimizde yinelenen kodu azaltabiliriz. let metodu, belirli bir değişkeni tanımlayarak veya bir bloğu çalıştırarak o değişkenin değerini oluşturur. Bu değişken, daha sonra herhangi bir testte kullanılabilir. Örneğin, aşağıdaki testlerde user değişkenini kullanabiliriz:
describe "User" do
let(:user) { User.new(name: "John", age: 30) }
it "has a name" do
expect(user.name).to eq("John")
end
it "has an age" do
expect(user.age).to eq(30)
end
endVarsayılan RSpec çıktısı "progress" biçimindedir. RSpec çıktı formatlarında progress, documentation, json ve html çıktılarını görebiliriz.
Bunun için testi çalıştırırken ;
rspec foo.spec -f d # documentation formatında testin çıktılarını gösterir.
rspec foo.spec -f j # json formatında testin çıktılarını gösterir.
rspec foo.spec -f h # html formatında testin çıktılarını gösterir.