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. |