RSpec: Bir özellik ile istek belirtimi arasındaki fark nedir?


113

Rspec'in özellik spesifikasyonları ile talep spesifikasyonları arasındaki kavramsal fark nedir ?

Özellik teknik özellik belgelerinden:

Özellik özellikleri, bir uygulama aracılığıyla işlevsellik dilimlerini denemek için yapılan üst düzey testlerdir. Uygulamayı yalnızca harici arabirimi, genellikle web sayfaları aracılığıyla çalıştırmaları gerekir.

Ve talep özellikleri için:

İstek özellikleri, Rails'in entegrasyon testleri etrafında ince bir paket sağlar ve yönlendirme dahil (Rails tarafından sağlanır) ve saplama olmadan (bu size bağlıdır) tüm yığın boyunca davranışı yönlendirmek için tasarlanmıştır. İstek özellikleriyle şunları yapabilirsiniz:

  • tek bir istek belirtin
  • birden çok denetleyicide birden çok istek belirtin
  • birden çok oturumda birden çok istek belirtin

Özellik özelliklerinin Capybara'yı kullandığını ve istek özelliklerinin kullanmadığını biliyorum . Ancak bu, farklı kavramları hak etmiyor.

Yanıtlar:


147

Kavramsal fark, genellikle bir kullanıcı hikayesini test etmeniz ve tüm etkileşimin kullanıcı arayüzü aracılığıyla yürütülmesi gerektiğidir. İşte burada Capybara devreye giriyor. Bir istek özelliği, hala uygulamanızın davranışını test ediyor ve bir kabul testinin sahip olacağı okunabilirlik beklentisine sahip değil. Bu nedenle, kabul testleri için geliştirilmiş sözdizimi için özellik vardır.

Teknik farklılıklar arasında talep özellikleri sarma Rails entegrasyon testleri yer alırken, özellik spesifikasyonları içermez. Bu, istek özellikleriyle yanıta karşı alma, gönderme, yerleştirme, silme ve iddia etme yöntemlerini kullanabileceğiniz anlamına gelir. Özellik özellikleriyle, tüm etkileşimi tarayıcı üzerinden yönlendirmeli ve sayfayı ziyaret etme ve iddia etme gibi yöntemler kullanmalısınız.

Github'daki rspec-rails kaynak kodundaki feature_spec.feature'ı okumanızı tavsiye ederim. Umarım bu yardımcı olur.


2
Öyleyse, hem özelliği hem de istek özelliklerini kullanmanızı önerir misiniz, yoksa biri veya diğeri yeterli mi? (
TDD'de

2
İkisini de kullanıyorum, @robertwbradford. Testlerde dışarı çıkmam için özellik özelliklerini kullanıyorum - kullanıcı deneyimini test ediyorum ve ardından birim testlerini kullanarak işlevselliği geliştiriyorum. Ben yanıtları test etmek için istek özelliklerini kullanmak - örneğin bir sessions_spec bir tarif olabilir "GET /login"ayında beklenen bloğu itgibi bloklar expect(response.status).to eq(200)ve expect(response).to render_template(:new)ya bir de describe "POST /sessions", bir context "with valid credentials"blok ile expect(response).to redirect_to(user)vefollow_redirect!; expect(response.body).to include("Signed in")
Richard Jordan

5
Ve denetleyici özelliklerini de kullanıyor musunuz? Görünüşe göre, istek özelliklerinde test ettiğiniz ile denetleyici özelliklerinde normalde test edilenler arasında biraz yineleme var.
Ernesto

5
Bunu söyleyerek, yukarıdaki bağlantılı yazı farklılıkları açıkça tanımlıyor. API aracılığıyla test etmek için istek özelliklerini kullanın, ön uç aracılığıyla test etmek için özellik özelliklerini kullanın.
Damien Roche

2
@RichardJordan: Bir soru: Özellik özelliklerinde, Rails yollarını (yani visit users_path) veya kodlanmış dizeleri ( visit '/users') kullanmanızı önerir misiniz ?. Şahsen, bu tür özelliklerde herhangi bir uygulama dahili kullanmamayı tercih ederim.
tokland
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.