RSpec - Ghi thông số kỹ thuật

Trong chương này, chúng ta sẽ tạo một lớp Ruby mới, lưu nó vào tệp riêng của nó và tạo một tệp đặc tả riêng để kiểm tra lớp này.

Đầu tiên, trong lớp học mới của chúng tôi, nó được gọi là StringAnalyzer. Đó là một lớp đơn giản, bạn đoán nó, phân tích các chuỗi. Lớp của chúng tôi chỉ có một phương thứchas_vowels?như tên của nó gợi ý, trả về true nếu một chuỗi chứa các nguyên âm và false nếu không. Đây là cách triển khai choStringAnalyzer -

class StringAnalyzer 
   def has_vowels?(str) 
      !!(str =~ /[aeio]+/i) 
   end 
end

Nếu bạn theo dõi phần HelloWorld, bạn đã tạo một thư mục có tên C: \ rspec_tutorial \ spec.

Xóa tệp hello_world.rb nếu bạn có và lưu mã StringAnalyzer ở trên vào tệp có tên string_analyzer.rb trong thư mục C: \ rspec_tutorial \ spec.

Đây là nguồn cho tệp thông số kỹ thuật của chúng tôi để kiểm tra 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

Lưu nó trong cùng một thư mục đặc tả, đặt tên là string_analyzer_test.rb.

Trong cửa sổ cmd.exe của bạn, cd vào thư mục C: \ rspec_tutorial và chạy lệnh này: dir spec

Bạn sẽ thấy những điều sau:

Thư mục của 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

Bây giờ chúng ta sẽ chạy các bài kiểm tra của mình, hãy chạy lệnh này: rspec spec

Khi bạn chuyển tên của một thư mục vào rspec, nó chạy tất cả các tệp đặc tả bên trong thư mục. Bạn sẽ thấy kết quả này -

No examples found.

Finished in 0 seconds (files took 0.068 seconds to load)
0 examples, 0 failures

Lý do mà điều này xảy ra là theo mặc định, rspecchỉ chạy các tệp có tên kết thúc bằng “_spec.rb”. Đổi tên string_analyzer_test.rb thành string_analyzer_spec.rb. Bạn có thể làm điều đó dễ dàng bằng cách chạy lệnh này -

ren spec\string_analyzer_test.rb string_analyzer_spec.rb

Bây giờ, chạy rspec một lần nữa, bạn sẽ thấy đầu ra giống như thế này -

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)

Bây giờ, hãy lưu các thay đổi bạn vừa thực hiện trong string_analyizer.rb và chạy lại lệnh rspec spec, bây giờ bạn sẽ thấy đầu ra giống như sau:

..
Finished in 0.002 seconds (files took 0.11401 seconds to load)
2 examples, 0 failures

Xin chúc mừng, các ví dụ (bài kiểm tra) trong tệp thông số kỹ thuật của bạn hiện đã vượt qua. Chúng tôi đã sửa một lỗi trong biểu thức chính quy có phương thức nguyên âm nhưng các bài kiểm tra của chúng tôi vẫn chưa hoàn thành.

Sẽ rất hợp lý nếu bạn thêm nhiều ví dụ kiểm tra nhiều loại chuỗi đầu vào khác nhau bằng phương thức has nguyên âm.

Bảng sau đây cho thấy một số hoán vị có thể được thêm vào trong các Ví dụ mới (nó chặn)

Chuỗi đầu vào Sự miêu tả Kết quả mong đợi với has_vowels?
'aaa', 'eee', 'iii', 'o' Chỉ có một nguyên âm và không có các chữ cái khác. thật
'abcefg' 'Ít nhất một nguyên âm và một số phụ âm' thật
'mnklp' Chỉ phụ âm. sai
'' Chuỗi trống (không có chữ cái) sai
'abcde55345 & ??' Nguyên âm, phụ âm, số và ký tự dấu câu. thật
'423432 %%% ^ &' Chỉ số và ký tự dấu câu. sai
'AEIOU' Chỉ các nguyên âm chữ hoa. thật
'AeiOuuuA' Chỉ viết hoa và viết thường. thật
'AbCdEfghI' Các nguyên âm và phụ âm viết hoa và viết thường. thật
'BCDFG' Chỉ phụ âm chữ hoa. sai
'' Chỉ các ký tự khoảng trắng. sai

Bạn quyết định chọn ví dụ nào để thêm vào tệp thông số kỹ thuật của mình. Có rất nhiều điều kiện để kiểm tra, bạn cần xác định tập con nào là quan trọng nhất và kiểm tra mã của bạn là tốt nhất.

Các rspec lệnh cung cấp nhiều tùy chọn khác nhau, để xem tất cả, hãy nhập rspec-Cứu giúp. Bảng sau liệt kê các tùy chọn phổ biến nhất và mô tả những gì chúng thực hiện.

Sr.No. Tùy chọn / cờ & Mô tả
1

-I PATH

Thêm PATH vào đường dẫn tải (yêu cầu) rspec sử dụng khi tìm kiếm các tệp nguồn Ruby.

2

-r, --require PATH

Thêm một tệp nguồn cụ thể được yêu cầu trong thông số kỹ thuật của bạn. các tập tin).

3

--fail-fast

Với tùy chọn này, rspec sẽ ngừng chạy các thông số sau khi Ví dụ đầu tiên không thành công. Theo mặc định, rspec chạy tất cả các tệp thông số kỹ thuật được chỉ định, bất kể có bao nhiêu lỗi.

4

-f, --format FORMATTER

Tùy chọn này cho phép bạn chỉ định các định dạng đầu ra khác nhau. Xem phần Định dạng để biết thêm chi tiết về các định dạng đầu ra.

5

-o, --out FILE

Tùy chọn này hướng rspec ghi kết quả kiểm tra vào tệp đầu ra FILE thay vì ra tiêu chuẩn.

6

-c, --color

Bật màu trong đầu ra của rspec. Kết quả Ví dụ thành công sẽ hiển thị bằng văn bản màu xanh lá cây, thất bại sẽ hiển thị bằng văn bản màu đỏ.

7

-b, --backtrace

Hiển thị đầy đủ lỗi tồn đọng trong đầu ra của rspec.

số 8

-w, --warnings

Hiển thị cảnh báo Ruby trong đầu ra của rspec.

9

-P, --pattern PATTERN

Tải và chạy các tệp thông số kỹ thuật phù hợp với mẫu PATTERN. Ví dụ: nếu bạn truyền -p “* .rb”, rspec sẽ chạy tất cả các tệp Ruby, không chỉ những tệp có kết thúc bằng “_spec.rb”.

10

-e, --example STRING

Tùy chọn này hướng rspec chạy tất cả các Ví dụ có chứa văn bản STRING trong mô tả của chúng.

11

-t, --tag TAG

Với tùy chọn này, rspec sẽ chỉ chạy các ví dụ có chứa thẻ TAG. Lưu ý rằng TAG được chỉ định là biểu tượng Ruby. Xem phần về Thẻ RSpec để biết thêm chi tiết.