RSpec ve Salatalık arasındaki fark nedir? [kapalı]


114

6 aylık Rails geliştirme deneyimim var. Şu anda kimlik doğrulama ve yetkilendirme ve postgresql db ile kullanımda olan bir web uygulaması oluşturdum.

İkinci Rails uygulamama geçiyorum ama bu sefer öğrendiğim derslerden sonra onu TDD kullanarak geliştirmek istiyorum, çünkü onu ölçeklendirmenin ve hataları düzeltmenin çok daha kolay olduğunu fark ettim. Gelişmesi yavaş ama uzun vadede başa çıkması çok daha kolay.

Rspec ve Cucumber'ı duydum ama onlardan iyice kafam karıştı.

RSpec ile Salatalık arasındaki farkın ne olduğunu ve ne için kullanıldığını bilmek istiyorum.

Yeni başlayanların (aynı zamanda tek geliştirici olan) bakış açısından bir test çerçevesine gerçekten ihtiyaç olup olmadığını bilmek de faydalı olacaktır.


6
Kafanızı daha da karıştırmak için, Minitest de bir seçenek olabilir
lucas clemente

5
Capybara, kendi başına bir çerçeve değil, test çerçevelerinin herhangi birinde kullanılabilecek bir sürücüdür. Watir-webdriver ve Selenium, benzer işlevleri yerine getiren, ancak gerçek bir tarayıcı kullanan ve Capybara sürüşünden çok daha yavaş olan iki şeydir Rack :: Test
DVG

37
Bu nasıl yapıcı değil ???
Jason Swett

19
Harika soru ve harika cevap. Tam da ihtiyacım olan şey. Yapıcı olmadığı için sorunun kapanışı beni şaşırttı. Tartışmaya yol açacaksa kimin umrunda? Toplum oyu bunun için var.
dpurrington

14
Soruyu kapatmanın temelinin yanıltıcı olduğunu düşündüğüm için yeniden açılması için oy kullanmak. Kesinlikle "gerçekler, referanslar veya uzmanlık tarafından desteklenen" kullanılarak yanıtlanabilir (ve verilmiştir!) Ve herhangi bir StackOverflow sorusu muhtemelen "tartışmayı, argümanları, oylamayı" (hepimizin bildiği ve gördüğü) muhtemelen isteyecektir. "Oylama" konusuna gelince? SO'nun kim çalışma şekli, soruları ve yanıtları artırmak ve aşağı oylamakla ilgilidir. Temelde büyük bir anket. Bunu kapatmak aptalcaydı. Konu sorusu ve cevabı için iyi bir yardımcıdır .
Adam Cameron

Yanıtlar:


323

RSpec ve Cucumber, her ikisi de test çerçeveleri. RSpec, geleneksel Birim Testini içerir (bu, uygulamanın geri kalanından ayrı olarak bir sınıfın veya uygulamanın bir kısmının test edilmesi anlamına gelir. Böylece modeliniz, modelinizin yapması gerekeni yapar, denetleyici yapması gerekeni yapar vb.).

Hem RSpec hem de Salatalık, Kabul Testi için kullanılır (Kime sorduğunuza bağlı olarak buna ATDD, BDD, Örneklerle Spesifikasyon, vb. Denir). Bunlar, iş vakası odaklı Entegrasyon Testleridir, yani bir kullanıcının uygulamayı kullanma ve tam Rails yığınını kullanma şeklini simüle ettikleri anlamına gelir, böylece uygulamanızın farklı bölümlerinin birlikte çalışma biçimiyle ilgili sorunlar, birim testinin olmayacağı şekilde bulunabilir. bulabilirsiniz.

RSpec ve Cucumber arasındaki temel fark, iş okunabilirlik faktörüdür. Hıyar'ın ana teması, spesifikasyonun (özelliklerin) test kodundan ayrı olmasıdır, böylece ürün sahipleriniz kodu kazmak zorunda kalmadan spesifikasyonu sağlayabilir veya inceleyebilir. Bunlar, Cucumber'da oluşturduğunuz .feature dosyalarıdır. RSpec'in benzer bir mekanizması vardır, ancak bunun yerine, iş özelliğini içeren bir Tanımla, Bağlam veya It bloğuyla bir adımı tanımlarsınız ve ardından bu ifadeyi yürüten koda hemen sahip olursunuz. Bu yaklaşım, geliştiricilerin birlikte çalışması biraz daha kolay, ancak teknik olmayan kişiler için biraz daha zordur.

Hangisini kullanmalı? Tek geliştirici ve ürün sahibi sizseniz, o zaman RSpec'e bağlı kalırım, teknik bir kişinin anlamasının daha kolay olduğunu hissediyorum, işleri kapsamlı ve kontrol altında tutmak için birkaç avantaj sunuyor ve sizi test için RegEx'lerle uğraşmaktan kurtarıyor adımları tekrarlayın. Bunu bir müşteri için oluşturuyorsanız ve Spesifikasyon ile ilgili olarak uygulamalıysa, Kabul Testiniz için Salatalık ile gidin ve Birim Testleri için RSpec'i kullanın.

Sadece ikisi arasındaki temel farkı göstermek için:

Salatalık:

#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"

#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
  FactoryGirl.create(:article, title: title)
end 
When /^I visit the list of articles$/ do
  visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
  page.should have_content title
end

RSpec

describe "Articles" do
  let(:article) { FactoryGirl.create(:article) }
  context "Index Page" do
    before { visit articles_path }
    it { page.should have_content article.title }
  end
end

Bu blog dizisi, RSpec ile yola çıkmak için mükemmeldir.


24
Bu mükemmel bir cevap. Zaman ayırdığınız ve tavsiyeniz için çok teşekkür ederim. Raylar üzerine okuduğum bir sürü kitap var ama şimdiye kadar bu tür ayrımları yapan ve hangisinin hangisi olduğunu açıklayan bir kitap bulamadım. Tekrar teşekkürler
banditKing

2
Bu yanıtı ihtiyacı olanlara daha az tavsiye edemezdim. Detaylar için teşekkür ederim!
Ikon

3
Bu gerçekten de stackoverflow hakkındaki en kapsamlı ve anlaşılması kolay cevaplardan biridir (harika bir örnekle birlikte!)
Sheharyar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.