Apa perbedaan antara RSpec dan Timun? [Tutup]

114

Saya memiliki pengalaman pengembangan Rails selama 6 bulan. Saya telah membangun aplikasi web yang sedang digunakan sekarang dengan otentikasi dan otorisasi dan postgresql db.

Saya beralih ke aplikasi Rails kedua saya tetapi kali ini, setelah pelajaran yang didapat, saya ingin mengembangkannya menggunakan TDD, karena saya melihat jauh lebih mudah untuk menskalakannya dan memperbaiki bug. Ini lambat untuk berkembang tetapi dalam jangka panjang jauh lebih mudah untuk ditangani.

Saya telah mendengar tentang Rspec dan Mentimun tetapi saya benar-benar bingung dengan mereka.

Saya ingin tahu apa perbedaan antara RSpec dan Timun dan kegunaannya.

Akan berguna juga untuk mengetahui apakah, dari sudut pandang pemula (yang juga merupakan pengembang tunggal) apakah kerangka pengujian benar-benar diperlukan.

banditKing
sumber
6
Untuk lebih membingungkan Anda, Minitest juga bisa menjadi pilihan
lucas clemente
5
Kapibara benar-benar merupakan driver yang dapat digunakan dalam kerangka pengujian mana pun, bukan kerangka kerja itu sendiri. Watir-webdriver dan Selenium adalah dua hal yang melakukan fungsi serupa, tetapi menjalankan browser nyata dan jauh lebih lambat daripada Capybara driving Rack :: Test
DVG
37
Bagaimana ini tidak konstruktif ???
Jason Swett
19
Pertanyaan bagus dan jawaban bagus. Itu yang saya butuhkan. Saya bingung dengan penutupan pertanyaan yang tidak konstruktif. Siapa yang peduli jika itu akan memancing perdebatan? Untuk itulah voting komunitas.
dpurrington
14
Pemungutan suara untuk dibuka kembali karena menurut saya dasar untuk menutup pertanyaan itu spekulatif. Ini pasti bisa (dan telah!) Dijawab menggunakan "didukung oleh fakta, referensi, atau keahlian", dan pertanyaan StackOverflow apa pun yang mungkin "kemungkinan akan mengundang perdebatan, argumen, polling" (yang kita semua tahu dan lihat). Untuk "polling"? Modus operandi SO adalah tentang upvoting dan downvoting tanya jawab. Ini pada dasarnya adalah satu jajak pendapat besar. Menutup ini konyol. Ini sangat membantu, tentang pertanyaan dan jawaban topik .
Adam Cameron

Jawaban:

323

RSpec dan Cucumber keduanya merupakan kerangka kerja pengujian. RSpec mencakup Pengujian Unit tradisional (yang berarti menguji kelas atau bagian aplikasi secara terpisah dari aplikasi lainnya. Jadi, model Anda melakukan apa yang seharusnya dilakukan model Anda, pengontrol melakukan apa yang seharusnya dilakukan, dll).

RSpec dan Ketimun keduanya digunakan untuk Pengujian Penerimaan (Yang disebut ATDD, BDD, Spesifikasi dengan Contoh, dll tergantung siapa yang Anda tanyakan). Ini adalah Tes Integrasi berbasis kasus bisnis, yang berarti mereka mensimulasikan cara pengguna menggunakan aplikasi dan menggunakan tumpukan Rails lengkap sehingga masalah dengan cara berbagai bagian aplikasi Anda bekerja bersama dapat ditemukan dengan cara yang tidak akan dilakukan pengujian unit. Temukan.

Perbedaan utama antara RSpec dan Ketimun adalah faktor keterbacaan bisnis. Daya tarik utama timun adalah spesifikasi (fitur) terpisah dari kode pengujian, sehingga pemilik produk Anda dapat memberikan atau meninjau spesifikasi tanpa harus mempelajari kode. Ini adalah file .feature yang Anda buat di Mentimun. RSpec memiliki mekanisme yang serupa, tetapi Anda mendeskripsikan langkah dengan blok Describe, Context atau It yang berisi spesifikasi bisnis, lalu segera memiliki kode yang menjalankan pernyataan tersebut. Pendekatan ini sedikit lebih mudah bagi pengembang untuk dikerjakan tetapi sedikit lebih sulit untuk orang non-teknis.

Yang akan digunakan? Jika Anda adalah satu-satunya pengembang dan pemilik produk, maka saya akan tetap menggunakan RSpec, saya merasa lebih mudah bagi orang teknis untuk memahaminya, menawarkan beberapa keuntungan dalam menjaga segala sesuatunya tetap terkendali, dan menjauhkan Anda dari mengotak-atik RegEx untuk pengujian Langkah. Jika Anda membuat ini untuk klien, dan mereka sudah siap dengan spesifikasinya, gunakan Timun untuk Tes Penerimaan Anda dan gunakan RSpec untuk Tes Unit.

Hanya untuk mendemonstrasikan perbedaan utama antara keduanya:

Timun:

#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

Ini blog seri sangat baik untuk mendapatkan pergi dengan RSpec.

DVG
sumber
24
Ini adalah jawaban yang sangat bagus. Terima kasih banyak atas waktu dan sarannya. Ada banyak buku tentang rel yang pernah saya baca, tetapi sejauh ini belum menemukan satu pun yang membuat perbedaan semacam ini dan menjelaskan yang mana. Sekali lagi terima kasih
banditKing
2
Saya tidak bisa merekomendasikan jawaban ini lebih sedikit kepada siapa pun yang membutuhkan. Terima kasih untuk detailnya!
Ikon
3
Ini memang salah satu jawaban yang paling komprehensif dan mudah dipahami tentang stackoverflow (lengkap dengan contoh yang bagus!)
Sheharyar