RSpec กับ Cucumber ต่างกันอย่างไร? [ปิด]


114

ฉันมีประสบการณ์ในการพัฒนา Rails 6 เดือน ฉันได้สร้างเว็บแอปพลิเคชันที่ใช้งานอยู่ในขณะนี้ด้วยการตรวจสอบสิทธิ์และการอนุญาตและ postgresql db

ฉันกำลังจะไปยังแอปพลิเคชั่น Rails ที่สอง แต่คราวนี้หลังจากเรียนรู้บทเรียนแล้วฉันต้องการพัฒนาโดยใช้ TDD เนื่องจากฉันสังเกตเห็นว่ามันง่ายกว่ามากในการปรับขนาดและแก้ไขข้อบกพร่อง พัฒนาช้า แต่ในระยะยาวจัดการได้ง่ายกว่ามาก

ฉันเคยได้ยิน Rspec และ Cucumber แต่พวกเขาสับสนอย่างมาก

ฉันอยากทราบว่า RSpec กับ Cucumber ต่างกันอย่างไรและใช้ทำอะไร

นอกจากนี้ยังจะเป็นประโยชน์หากทราบว่าจากมุมมองของผู้เริ่มต้น (ซึ่งเป็นผู้พัฒนาเพียงคนเดียว) ว่าจำเป็นต้องใช้กรอบการทดสอบจริงหรือไม่


6
เพื่อทำให้คุณสับสนมากขึ้น Minitest อาจเป็นตัวเลือกหนึ่ง
lucas clemente

5
Capybara เป็นไดรเวอร์ที่สามารถใช้ในกรอบการทดสอบใด ๆ ไม่ใช่กรอบในตัวมันเอง Watir-webdriver และ Selenium เป็นสองสิ่งที่ทำหน้าที่คล้ายกัน แต่ขับเคลื่อนเบราว์เซอร์จริงและช้ากว่า Capybara ที่ขับ Rack :: Test
DVG

37
ไม่สร้างสรรค์ได้อย่างไร ???
Jason Swett

19
คำถามที่ดีและคำตอบที่ดี มันเป็นเพียงสิ่งที่ฉันต้องการ ฉันรู้สึกงุนงงกับการปิดคำถามแบบไม่สร้างสรรค์ ใครจะสนใจว่าจะมีการอภิปรายหรือไม่? นั่นคือการลงคะแนนของชุมชน
dpurrington

14
การลงคะแนนเพื่อเปิดอีกครั้งเนื่องจากฉันคิดว่าพื้นฐานสำหรับการปิดคำถามเป็นเรื่องที่จำเป็น สามารถตอบได้อย่างแน่นอน (และได้รับ!) โดยใช้ "ได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ" และคำถาม StackOverflow ใด ๆ ที่อาจ "มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งการสำรวจความคิดเห็น" (ซึ่งเราทุกคนรู้และเคยเห็นมาแล้ว) สำหรับ "การหยั่งเสียง"? ใครเป็นผู้ดำเนินการตัวดำเนินการ SO เป็นเรื่องเกี่ยวกับการโหวตขึ้นและลงคะแนนคำถามและคำตอบ โดยพื้นฐานแล้วเป็นการสำรวจความคิดเห็นครั้งใหญ่ การปิดสิ่งนี้เป็นเรื่องโง่เขลา เป็นประโยชน์ในหัวข้อคำถามและคำตอบ
Adam Cameron

คำตอบ:


323

RSpec และ Cucumber ต่างก็เป็นกรอบการทดสอบ RSpec รวมถึงการทดสอบหน่วยแบบดั้งเดิม (ซึ่งหมายถึงการทดสอบคลาสหรือบางส่วนของแอปพลิเคชันโดยแยกออกจากแอปพลิเคชันที่เหลือดังนั้นโมเดลของคุณจึงทำในสิ่งที่โมเดลของคุณควรจะทำคอนโทรลเลอร์จะทำในสิ่งที่ควรทำ ฯลฯ )

RSpec และ Cucumber ใช้สำหรับการทดสอบการยอมรับ (ซึ่งเรียกว่า ATDD, BDD, ข้อมูลจำเพาะตามตัวอย่าง ฯลฯ ขึ้นอยู่กับว่าคุณถามใคร) นี่คือการทดสอบการผสานรวมที่ขับเคลื่อนด้วยกรณีธุรกิจซึ่งหมายความว่าพวกเขาจำลองวิธีที่ผู้ใช้ใช้แอปพลิเคชันและใช้สแต็ก Rails แบบเต็มดังนั้นปัญหาเกี่ยวกับวิธีการทำงานร่วมกันของส่วนต่างๆของแอปพลิเคชันของคุณในลักษณะที่การทดสอบหน่วยจะไม่เกิดขึ้น หา.

ความแตกต่างหลักระหว่าง RSpec และ Cucumber คือปัจจัยด้านความสามารถในการอ่านทางธุรกิจ ข้อได้เปรียบหลักของแตงกวาคือข้อกำหนด (คุณสมบัติ) จะแยกจากรหัสทดสอบดังนั้นเจ้าของผลิตภัณฑ์ของคุณจึงสามารถให้หรือตรวจสอบข้อกำหนดได้โดยไม่ต้องเจาะลึกโค้ด นี่คือไฟล์. คุณลักษณะที่คุณสร้างใน Cucumber RSpec มีกลไกที่คล้ายกัน แต่ให้คุณอธิบายขั้นตอนด้วยบล็อก Describe, Context หรือ It ที่มีข้อกำหนดทางธุรกิจจากนั้นจึงมีรหัสที่เรียกใช้คำสั่งนั้นทันที วิธีนี้ง่ายกว่าเล็กน้อยสำหรับนักพัฒนาในการทำงาน แต่จะยากกว่าเล็กน้อยสำหรับคนที่ไม่ใช่สายเทคนิค

จะใช้แบบไหน? หากคุณเป็นผู้พัฒนาและเป็นเจ้าของผลิตภัณฑ์ แต่เพียงผู้เดียวฉันจะยึดติดกับ RSpec ฉันรู้สึกว่าคนทางเทคนิคเข้าใจง่ายขึ้นมีข้อดีบางประการในการรักษาขอบเขตและอยู่ภายใต้การควบคุมและป้องกันไม่ให้คุณยุ่งกับ RegEx เพื่อทดสอบ ขั้นตอน หากคุณกำลังสร้างสิ่งนี้สำหรับไคลเอนต์และพวกเขาได้ลงมือปฏิบัติจริงเกี่ยวกับข้อมูลจำเพาะให้ไปที่ Cucumber สำหรับการทดสอบการยอมรับของคุณและใช้ RSpec สำหรับการทดสอบหน่วย

เพียงเพื่อแสดงให้เห็นความแตกต่างที่สำคัญระหว่างสองสิ่งนี้:

แตงกวา:

#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

นี้บล็อกชุดที่ยอดเยี่ยมที่ได้รับไปกับ RSpec


24
นี่คือคำตอบที่ดีเยี่ยม ขอบคุณมากสำหรับเวลาและคำแนะนำ มีหนังสือมากมายบนรางที่ฉันอ่าน แต่จนถึงขณะนี้ยังไม่พบหนังสือที่สร้างความแตกต่างและอธิบายว่าเล่มไหน ขอบคุณอีกครั้ง
banditKing

2
ฉันไม่สามารถแนะนำคำตอบนี้ให้กับทุกคนที่ต้องการได้ ขอบคุณสำหรับรายละเอียด!
ไอคอน

3
นี่เป็นหนึ่งในคำตอบที่ครอบคลุมและเข้าใจง่ายที่สุดใน stackoverflow (พร้อมตัวอย่างที่ยอดเยี่ยม!)
Sheharyar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.