RSpec vs Salatalık (RSpec hikayeleri) [kapalı]


136

Ne zaman Rails uygulama özellikleri ve ne zaman Salatalık (eski rspec hikayeleri) kullanmalıyım? Tabii ki hem özellikleri hem de aktif olarak teknik özellikleri nasıl kullandığımı biliyorum. Ancak Salatalık kullanmak hala garip geliyor. Bu konudaki mevcut görüşüm, istemci için uygulama uygularken ve tüm sistemin henüz nasıl çalışması gerektiğini anlamadığınızda Salatalık kullanmanın uygun olmasıdır.

Peki ya kendi projemi yaparsam? Çoğu zaman, sistemin parçalarının nasıl etkileşime girdiğini biliyorum. Tek yapmam gereken bir sürü birim test yazmak. O zaman Salatağa ihtiyacım olduğunda olası durumlar nelerdir?

Buna karşılık ikinci bir soru olarak: Salatalık hikayeleri yazarsam spesifikasyonlar yazmak zorunda mıyım? Aynı şeyi tekrar test etmek olmaz mı?


12
Nasıl yani her tek ben rastlamak defalarca Bill tarafından Lizard VE soru upvoted aynı zamanda "yapıcı değil" şeklinde kapalı olduğunu [Kapalı] soru!?! Neyi kaçırıyorum ?
Aşkan Kh. Nazary

4
Tamamen katılıyorum. "XXX yapmak için en iyi uygulama hangisi" gibi soruların gönderileceği yer konusunda hala kafam karıştı.
Dekan

3
Katılıyorum, SO hakkında her zaman bir sebepten ötürü kapalı olan anlayışlı, yardımcı cevaplarla iyi sorularla karşılaşıyorum.
Russell Silva

Bu soruyu 2017'de buldum, çünkü hala ilgili ve hala harika bir soru, harika cevaplarla. Ayrıca, söz konusu çerçeveler çoğunlukla aynı insanlar tarafından tamamen ayrı iki endişe için tasarlandığından görüş bildirmez ... ancak bunu bilmek için biraz uzmanlığa ihtiyacınız olacaktır.
Lunivore

Yanıtlar:


114

Henüz yapmadıysanız, Dan North'un " Hikayede Neler Var?" Adlı mükemmel makalesine göz atmak isteyebilirsiniz.başlangıç ​​noktası olarak.

Salatalık hikayeleri için iki ana kullanımımız var. Birincisi, hikaye formu çok spesifik olduğu için, ürün sahibinin istediği özelliklere eklemlenmesine odaklanmaya yardımcı olur. Bu, öykülerin "konuşma simgesi" kullanımıdır ve öyküleri kod halinde uygulasak da uygulamasak da değerli olur. İkincisi, süreç yeterince iyi çalıştığında, daha önce tam hikayelerimiz var özelliği yazmaya başlamadan (günlük gerçeklikten daha çok çabaladığımız bir idealdir), kabul kriterleriniz açıkça belirtilir ve tam olarak ne ve nasıl olduğunu bilirsiniz. inşa etmek için çok fazla.

Rails çalışmamızda, Salatalık hikayeleri rspec birim testlerinin yerine geçmez. İkisi el ele gider. Uygulamada, birim testleri modellerin ve denetleyicilerin gelişimini teşvik etme eğilimindedir ve hikayeler görünümlerin geliştirilmesini sağlama eğilimindedir (görüşlerimiz için rspec yazma eğiliminde değiliz) ve uygulamanın bir bütün olarak iyi bir testini sağlama eğilimindedir. kullanıcının bakış açısı.

Yalnız çalışıyorsanız, iletişim yönü sizin için ilginç olmayabilir, ancak Salatalık'tan aldığınız entegrasyon testi olabilir. Webrat'tan yararlanırsanız, Salatalık yazmak temel işlevlerinizin çoğu için hızlı ve ağrısız olabilir.


6
İki ayrı konuyu karıştırıyorsunuz; 1) entegrasyon ve kabul testi yapmak iyidir ve 2) salatalık bu testleri yazmak için iyi bir araçtır. 1 için - evet, açıkça iyi bir fikirdir. 2 için, bir geliştirme ekibinin çok fazla dolaylı bir dilde testler yazması nadiren daha etkilidir, rspec ve capybara'da çok okunaklı entegrasyon ve kabul testleri yazabildiğinizde (veya - cennet Ruby'nin standart kütüphanesini araştırabiliriz - test / birim veya en küçük, kapibara ile birlikte). Jack Kinsella'nın aşağıda link verdiği gönderiye bakın.
Graham Ashton

Tamamen sana katılıyorum Abie! Salatalık entegrasyonu çok önemlidir!
dpapadopoulos

26

Bir döngü olarak düşünün:

Salatalık özelliğinizi yazın, daha sonra bu özelliğin parçalarını geliştirirken, bileşenleri tek tek tamamlamak için özellikler yazın. Özelliğin geçmesi için yeterli işlevsellik yazana kadar özellikleri tamamlamaya devam edin, ardından bir sonraki özelliğinizi yazın.


1
Dışarıda BDD döngüsünün çok güzel bir örneği var .
rdamborsky

21

Benim görüşüm, sözdiziminin size katlandığı verimlilik maliyetleri nedeniyle çoğu durumda Salatalık kullanmak kötü bir fikirdir. Ben de konu üzerine kapsamlı yazdı Salatalık Testleri için neden?


1
Makalenizi okudum ve salatalık hayranı olarak, makalenizde belirttiğiniz birçok noktaya katıldığımı söylemeliyim. Yine de, salatalığın testleri resmileştirmede ve onları dışarıdan kolayca okunabilir hale getirmede iyi bir yol olduğunu düşünüyorum.
huug

1
Jack - harika gönderi. Yazdığınız için çok teşekkürler, bana bunu kendim yapma zahmetinden kurtardınız.
Graham Ashton

3
huug - Testleri "yabancılara" göstermenin iyi bir yolu olabilir, ancak bana testleri okumak isteyen teknik olmayan bir ekip üyesini gösteriyorsunuz ve size bütçesini harcayan bir ekibi göstereceğim. Ayrıca, henüz zaman okuma testlerini boşa harcamak isteyen bir projenin teknik olmayan bir üyesi ile çalışmadım. Bilmiyorum, belki şanslıyım ...
Graham Ashton

Downvoted. Kullanıcıların salatalık hikayelerimi okuyup okumadıklarına bakılmaksızın, kullanıcı özelliklerini kullanıcı terimleriyle tanımlamanın bir geliştirici olarak benim için yararlı olduğunu düşünüyorum. Bu yüzden Salatalık'ı tüm projelerimde kullanıyorum ve diğerlerini de aynı şekilde yapmaya teşvik ediyorum.
Marnen Laibow-Koser

8

Salatalık hikayesi, kod parçalarının tek tek çalışması (yani birim testleri) yerine, uygulamanızın çözdüğü sorunun genel bir açıklamasıdır.

Abie'nin açıkladığı gibi, neredeyse uygulamanın karşılaması gereken gereksinimlerin bir listesidir ve doğrudan test edilebilir olmanın yanı sıra müşterinizle iletişim için çok yararlıdır.


2
Kesinlikle. Salatalık, uygulamanızın kullanımını açıklar. Örneğin, "Buraya tıklayın ve şu veya bu sonucu almayı umuyorum". Özellikler 'model' seviyesinde. Mesela, bu yöntemleri böyle parametrelerle çağırdığımda, bu sonucu döndürmesini bekliyorum.
Ariejan

6

Günümüzde Capspara ve Selenium Webdriver ile rspec'i kullanabilir ve tüm Salatalık hikaye ayrıştırıcılarını oluşturmak ve bakımını yapmaktan kaçınabilirsiniz. İşte ne tavsiye ederim:

  1. Hikayeni yaz
  2. RSpec kullanarak, bir entegrasyon testi oluşturacağım: spec / integrations / socks_rspec.rb
  3. Sonra yeni bir açıklama içeren bir entegrasyon testi oluştururdum ve her senaryo için engeller
  4. Sonra entegrasyon testi almak için gereken minimal işlevsellik uygulamak ve daha derine giderken (denetleyicileri ve modelleri, vb) Ben denetleyicileri ve modelleri TDD istiyorsunuz.
  5. Geri döndükçe entegrasyon testiniz geçmeli ve entegrasyon testine adımlar eklemeye devam edebilirsiniz
  6. tekrar et

Bununla birlikte, dikkat edilmesi gereken bir nokta, kontrolör ve entegrasyon testlerinin gerekli olmayabilecek şekilde çakışmasıdır, bu nedenle en iyi kararınızı kullanmanız gerekir, böylece zamanınızı boşa harcamazsınız.

Ayrıca, olukunuzu bulduktan sonra, BDD'yi kullanarak geliştirmenin en zevkli olduğunu göreceksiniz, o zamana kadar mükemmel yapıyormuş gibi hissetmiyorsanız ve aşırı düşünmeyin. Harika olacaksın!


2

Peki ya kendi projemi yaparsam? Çoğu zaman, sistemin parçalarının nasıl etkileşime girdiğini biliyorum. Tek yapmam gereken bir sürü birim test yazmak. O zaman Salatağa ihtiyacım olduğunda olası durumlar nelerdir?

Hâlâ Salatağa ihtiyacınız var. Sistemin nasıl çalıştığını gördüğünüzü belgelemek ve bir şeyleri değiştirirken işlevselliği bozmadığınızdan emin olmak için ona ihtiyacınız var.

Başka bir deyişle, birim testlere ihtiyacınızla aynı nedenlerle Salatalık hikayelerine ihtiyacınız var - sadece daha yüksek bir soyutlama düzeyinde çalışıyorlar.


2
Salatalık çok önemli olduğunu söyleyemem, ancak birim testleri normalde sadece sınıfları tek başına test etmek için kullanıldığından kesinlikle bir çeşit entegrasyon testine sahip olmalısınız.
Andy Waite

1
Sağ. Ve çoğu durumda, Salatalık entegrasyon testleri yazmanın en güzel yoludur.
Marnen Laibow-Koser
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.