RSpec - Penapisan

Anda mungkin ingin membaca bahagian pada Metadata RSpec sebelum membaca bahagian ini kerana, ternyata, penapisan RSpec berdasarkan pada Metadata RSpec.

Bayangkan anda mempunyai fail spec dan mengandungi dua jenis ujian (Contoh): ujian fungsi positif dan ujian negatif (ralat). Mari kita tentukan mereka seperti ini -

RSpec.describe "An Example Group with positive and negative Examples" do 
   context 'when testing Ruby\'s build-in math library' do
      
      it 'can do normal numeric operations' do 
         expect(1 + 1).to eq(2) 
      end 
      
      it 'generates an error when expected' do
         expect{1/0}.to raise_error(ZeroDivisionError) 
      end
      
   end 
end

Sekarang, simpan teks di atas sebagai fail bernama 'filter_spec.rb' dan kemudian jalankan dengan arahan ini -

rspec filter_spec.rb

Anda akan melihat output yang kelihatan seperti ini -

.. 
Finished in 0.003 seconds (files took 0.11201 seconds to load) 
2 examples, 0 failures

Sekarang bagaimana jika, kami mahu menjalankan semula ujian positif dalam fail ini? Atau hanya ujian negatif? Kita boleh melakukannya dengan mudah dengan Penapis RSpec. Tukar kod di atas untuk ini -

RSpec.describe "An Example Group with positive and negative Examples" do 
   context 'when testing Ruby\'s build-in math library' do
      
      it 'can do normal numeric operations', positive: true do 
         expect(1 + 1).to eq(2) 
      end 
      
      it 'generates an error when expected', negative: true do 
         expect{1/0}.to raise_error(ZeroDivisionError) 
      end
      
   end 
end

Simpan perubahan anda kepada filter_spec.rb dan jalankan arahan yang sedikit berbeza ini -

rspec --tag positive filter_spec.rb

Sekarang, anda akan melihat output yang kelihatan seperti ini -

Run options: include {:positive=>true} 
. 
Finished in 0.001 seconds (files took 0.11401 seconds to load) 
1 example, 0 failures

Dengan menyatakan - tag positif, kami memberitahu RSpec untuk hanya menjalankan Contoh dengan: pembolehubah metadata positif ditakrifkan. Kita boleh melakukan perkara yang sama dengan ujian negatif dengan menjalankan perintah seperti ini -

rspec --tag negative filter_spec.rb

Perlu diingat bahawa ini hanyalah contoh, anda boleh menentukan penapis dengan mana-mana nama yang anda mahukan.

Formula RSpec

Formatters membenarkan RSpec untuk memaparkan output daripada ujian dengan cara yang berbeza. Mari buat fail RSpec baharu yang mengandungi kod ini -

RSpec.describe "A spec file to demonstrate how RSpec Formatters work" do 
   context 'when running some tests' do 
      
      it 'the test usually calls the expect() method at least once' do 
         expect(1 + 1).to eq(2) 
      end
      
   end 
end

Sekarang, simpan ini ke fail yang dipanggil formatter_spec.rb dan jalankan arahan RSpec ini -

rspec formatter_spec.rb

Anda harus melihat output yang kelihatan seperti ini -

. 
Finished in 0.002 seconds (files took 0.11401 seconds to load) 
1 example, 0 failures

Sekarang jalankan arahan yang sama tetapi kali ini menentukan formatter, seperti ini -

rspec --format progress formatter_spec.rb

Anda harus melihat keluaran yang sama kali ini -

. 
Finished in 0.002 seconds (files took 0.11401 seconds to load) 
1 example, 0 failures

Sebabnya ialah formatter "kemajuan" adalah formatter lalai. Mari cuba formatter yang berbeza seterusnya, cuba jalankan arahan ini -

rspec --format doc formatter_spec.rb

Kini anda perlu melihat output ini -

A spec file to demonstrate how RSpec Formatters work 
   when running some tests 
      the test usually calls the expect() method at least once
Finished in 0.002 seconds (files took 0.11401 seconds to load) 
1 example, 0 failures

Seperti yang anda lihat, keluarannya agak berbeza dengan formatter "doc". Format ini mempersembahkan output dalam gaya seperti dokumentasi. Anda mungkin tertanya-tanya apa pilihan ini apabila anda mengalami kegagalan dalam ujian (Contoh). Mari kita ubah kod dalam formatter_spec.rb untuk kelihatan seperti ini -

RSpec.describe "A spec file to demonstrate how RSpec Formatters work" do 
   context 'when running some tests' do 
      
      it 'the test usually calls the expect() method at least once' do 
         expect(1 + 1).to eq(1) 
      end
      
   end 
end

Harapan mengharapkan (1 + 1). Untuk persamaan (1) harus gagal. Simpan perubahan anda dan jalankan semula arahan di atas -

rspec --format progresster_spec.rb dan ingat, kerana formatter "kemajuan" adalah lalai, anda hanya boleh menjalankan: rspec formatter_spec.rb . Anda harus melihat output ini -

F 
Failures:
1) A spec file to demonstrate how RSpec Formatters work when running some tests 
the test usually calls the expect() method at least once
   Failure/Error: expect(1 + 1).to eq(1)
	
      expected: 1
         got: 2
			  
      (compared using ==)			  
   # ./formatter_spec.rb:4:in `block (3 levels) in <top (required)>'

Finished in 0.016 seconds (files took 0.11201 seconds to load)
1 example, 1 failure
Failed examples:

rspec ./formatter_spec.rb:3 # A spec file to demonstrate how RSpec 
   Formatters work when running some tests the test usually calls 
   the expect() method at least once

Sekarang, mari kita cuba formatter doc, jalankan arahan ini -

rspec --format doc formatter_spec.rb

Sekarang, dengan ujian yang gagal, anda harus melihat output ini -

A spec file to demonstrate how RSpec Formatters work
   when running some tests
      the test usually calls the expect() method at least once (FAILED - 1)
		
Failures:

1) A spec file to demonstrate how RSpec Formatters work when running some
   tests the test usually calls the expect() method at least once
   Failure/Error: expect(1 + 1).to eq(1)
	
   expected: 1
        got: 2
		  
   (compared using ==)
   # ./formatter_spec.rb:4:in `block (3 levels) in <top (required)>'
	
Finished in 0.015 seconds (files took 0.11401 seconds to load) 
1 example, 1 failure

Contoh Gagal

rspec ./formatter_spec.rb:3 # Satu fail spec untuk menunjukkan bagaimana Formula Kerja RSpec berfungsi semasa menjalankan beberapa ujian ujian biasanya memanggil kaedah expect () sekurang-kurangnya sekali.

Formula RSpec menawarkan keupayaan untuk mengubah cara paparan keputusan ujian, bahkan mungkin membuat Formatter tersuai anda sendiri, tetapi itu adalah topik yang lebih maju.