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