RSpec - Spesifikasi Penulisan
Pada bab ini, kita akan membuat kelas Ruby baru, menyimpannya di file miliknya dan membuat file spesifikasi terpisah untuk menguji kelas ini.
Pertama, di kelas baru kita, ini disebut StringAnalyzer. Ini adalah kelas sederhana yang, Anda dapat menebaknya, menganalisis string. Kelas kami hanya memiliki satu metodehas_vowels?yang seperti namanya, mengembalikan nilai true jika string berisi vokal dan false jika tidak. Berikut implementasinya untukStringAnalyzer -
class StringAnalyzer
def has_vowels?(str)
!!(str =~ /[aeio]+/i)
end
end
Jika Anda mengikuti bagian HelloWorld, Anda membuat folder bernama C: \ rspec_tutorial \ spec.
Hapus file hello_world.rb jika Anda memilikinya dan simpan kode StringAnalyzer di atas ke file bernama string_analyzer.rb di folder C: \ rspec_tutorial \ spec.
Berikut adalah sumber file spesifikasi kami untuk menguji StringAnalyzer -
require 'string_analyzer'
describe StringAnalyzer do
context "With valid input" do
it "should detect when a string contains vowels" do
sa = StringAnalyzer.new
test_string = 'uuu'
expect(sa.has_vowels? test_string).to be true
end
it "should detect when a string doesn't contain vowels" do
sa = StringAnalyzer.new
test_string = 'bcdfg'
expect(sa.has_vowels? test_string).to be false
end
end
end
Simpan ini di direktori spesifikasi yang sama, beri nama string_analyzer_test.rb.
Di jendela cmd.exe Anda, cd ke folder C: \ rspec_tutorial dan jalankan perintah ini: dir spec
Anda harus melihat yang berikut -
Direktori C: \ rspec_tutorial \ spec
09/13/2015 08:22 AM <DIR> .
09/13/2015 08:22 AM <DIR> ..
09/12/2015 11:44 PM 81 string_analyzer.rb
09/12/2015 11:46 PM 451 string_analyzer_test.rb
Sekarang kita akan menjalankan pengujian kita, jalankan perintah ini: rspec spec
Saat Anda meneruskan nama folder ke rspec, ini menjalankan semua file spesifikasi di dalam folder. Anda harus melihat hasil ini -
No examples found.
Finished in 0 seconds (files took 0.068 seconds to load)
0 examples, 0 failures
Alasan hal ini terjadi adalah, secara default, rspechanya menjalankan file yang namanya diakhiri dengan "_spec.rb". Ubah nama string_analyzer_test.rb menjadi string_analyzer_spec.rb. Anda dapat melakukannya dengan mudah dengan menjalankan perintah ini -
ren spec\string_analyzer_test.rb string_analyzer_spec.rb
Sekarang, lari rspec spec lagi, Anda akan melihat keluaran yang terlihat seperti ini -
F.
Failures:
1) StringAnalyzer With valid input should detect when a string contains vowels
Failure/Error: expect(sa.has_vowels? test_string).to be true
expected true
got false
# ./spec/string_analyzer_spec.rb:9:in `block (3 levels) in <top (required)>'
Finished in 0.015 seconds (files took 0.12201 seconds to load)
2 examples, 1 failure
Failed examples:
rspec ./spec/string_analyzer_spec.rb:6 # StringAnalyzer With valid
input should detect when a string contains vowels
Do you see what just happened? Our spec failed because we have a bug in
StringAnalyzer. The bug is simple to fix, open up string_analyzer.rb
in a text editor and change this line:
!!(str =~ /[aeio]+/i)
to this:
!!(str =~ /[aeiou]+/i)
Sekarang, simpan perubahan yang baru saja Anda buat di string_analyizer.rb dan jalankan lagi perintah spesifikasi rspec, Anda sekarang akan melihat keluaran yang terlihat seperti -
..
Finished in 0.002 seconds (files took 0.11401 seconds to load)
2 examples, 0 failures
Selamat, contoh (tes) dalam file spesifikasi Anda sekarang sudah lewat. Kami memperbaiki bug dalam ekspresi reguler yang memiliki metode vokal tetapi pengujian kami masih jauh dari selesai.
Masuk akal untuk menambahkan lebih banyak contoh yang menguji berbagai jenis string input dengan metode vokal has.
Tabel berikut menunjukkan beberapa permutasi yang dapat ditambahkan dalam Contoh baru (itu memblokir)
String masukan | Deskripsi | Hasil yang diharapkan dengan has_vowels? |
---|---|---|
'aaa', 'eee', 'iii', 'o' | Hanya satu vokal dan tidak ada huruf lain. | benar |
'abcefg' | 'Setidaknya satu vokal dan beberapa konsonan' | benar |
'mnklp' | Hanya konsonan. | Salah |
'' | String kosong (tanpa huruf) | Salah |
'abcde55345 & ??' | Karakter vokal, konsonan, angka dan tanda baca. | benar |
'423432 %%% ^ &' | Angka dan tanda baca saja. | Salah |
'AEIOU' | Huruf vokal huruf besar saja. | benar |
'AeiOuuuA' | Huruf besar dan vokal bawah saja. | benar |
'AbCdEfghI' | Huruf vokal dan konsonan huruf besar dan kecil. | benar |
'BCDFG' | Hanya konsonan huruf besar. | Salah |
'' | Hanya karakter spasi. | Salah |
Terserah Anda untuk memutuskan, contoh mana yang akan ditambahkan ke file spesifikasi Anda. Ada banyak ketentuan yang harus diuji, Anda perlu menentukan subset ketentuan mana yang paling penting dan menguji kode Anda dengan sebaik-baiknya.
Itu rspec perintah menawarkan banyak opsi berbeda, untuk melihat semuanya, ketik rspec-Tolong. Tabel berikut mencantumkan opsi paling populer dan menjelaskan fungsinya.
Sr.No. | Opsi / bendera & Deskripsi |
---|---|
1 | -I PATH Menambahkan PATH ke jalur beban (membutuhkan) itu rspec digunakan saat mencari file sumber Ruby. |
2 | -r, --require PATH Menambahkan file sumber tertentu yang diperlukan dalam spesifikasi Anda. file (s). |
3 | --fail-fast Dengan opsi ini, rspec akan berhenti menjalankan spesifikasi setelah Contoh pertama gagal. Secara default, rspec menjalankan semua file spesifikasi yang ditentukan, tidak peduli berapa banyak kegagalan yang terjadi. |
4 | -f, --format FORMATTER Opsi ini memungkinkan Anda untuk menentukan format keluaran yang berbeda. Lihat bagian di Format untuk detail lebih lanjut tentang format keluaran. |
5 | -o, --out FILE Opsi ini mengarahkan rspec untuk menulis hasil tes ke file output FILE alih-alih ke standar. |
6 | -c, --color Mengaktifkan warna dalam keluaran rspec. Hasil Contoh yang berhasil akan ditampilkan dalam teks hijau, kegagalan akan dicetak dengan teks merah. |
7 | -b, --backtrace Menampilkan jejak latar kesalahan penuh dalam keluaran rspec. |
8 | -w, --warnings Menampilkan peringatan Ruby dalam keluaran rspec. |
9 | -P, --pattern PATTERN Muat dan jalankan file spesifikasi yang cocok dengan POLA pola. Misalnya, jika Anda mengirimkan -p “* .rb”, rspec akan menjalankan semua file Ruby, tidak hanya yang diakhiri dengan “_spec.rb”. |
10 | -e, --example STRING Opsi ini mengarahkan rspec untuk menjalankan semua Contoh yang berisi teks STRING dalam deskripsinya. |
11 | -t, --tag TAG Dengan opsi ini, rspec hanya akan menjalankan contoh yang berisi tag TAG. Perhatikan bahwa TAG ditentukan sebagai simbol Ruby. Lihat bagian Tag RSpec untuk lebih jelasnya. |