RSpec - Giới thiệu

RSpec là một khuôn khổ kiểm tra đơn vị cho ngôn ngữ lập trình Ruby. RSpec khác với các khuôn khổ xUnit truyền thống như JUnit vì RSpec là một công cụ phát triển theo hướng Hành vi. Điều này có nghĩa là, các bài kiểm tra được viết bằng RSpec tập trung vào “hành vi” của một ứng dụng đang được kiểm tra. RSpec không nhấn mạnh vào cách ứng dụng hoạt động mà thay vào đó là cách nó hoạt động, nói cách khác, ứng dụng thực sự làm gì.

Môi trường RSpec

Trước hết, bạn cần cài đặt Ruby trên máy tính của mình. Tuy nhiên, nếu bạn chưa thực hiện trước đó, thì bạn có thể tải xuống và cài đặt Ruby từ trang web Ruby chính - Ruby .

Nếu bạn đang cài đặt Ruby trên Windows, bạn nên có trình cài đặt Ruby cho Windows tại đây: http://www.rubyinstaller.org

Đối với hướng dẫn này, bạn sẽ chỉ cần trình soạn thảo văn bản, chẳng hạn như Notepad và bảng điều khiển dòng lệnh. Các ví dụ ở đây sẽ sử dụng cmd.exe trên Windows.

Để chạy cmd.exe, chỉ cần nhấp vào menu Bắt đầu và nhập “cmd.exe”, sau đó nhấn phím Return.

Tại dấu nhắc lệnh trong cửa sổ cmd.exe của bạn, hãy nhập lệnh sau để xem bạn đang sử dụng phiên bản Ruby nào:

ruby -v

Bạn sẽ thấy đầu ra dưới đây trông giống như sau:

ruby 2.2.3p173 (2015-08-18 revision 51636) [x64-mingw32]

Các ví dụ trong hướng dẫn này sẽ sử dụng Ruby 2.2.3 nhưng bất kỳ phiên bản nào của Ruby cao hơn 2.0.0 sẽ đủ. Tiếp theo, chúng ta cần cài đặt RSpec gem cho quá trình cài đặt Ruby của bạn. Đá quý là một thư viện Ruby mà bạn có thể sử dụng trong mã của riêng mình. Để cài đặt một viên ngọc, bạn cần sử dụnggem chỉ huy.

Hãy cài đặt Rspec gem ngay bây giờ. Quay lại Cửa sổ cmd.exe của bạn và nhập như sau:

gem install rspec

Bạn nên có một danh sách các gem phụ thuộc đã được cài đặt, đây là những gem mà gem rspec cần để hoạt động chính xác. Ở cuối đầu ra, bạn sẽ thấy một cái gì đó giống như thế này -

Done installing documentation for diff-lcs, rspec-support, rspec-mocks,
   rspec-expectations, rspec-core, rspec after 22 seconds 
6 gems installed

Đừng lo lắng, nếu đầu ra của bạn không giống hệt nhau. Ngoài ra, nếu bạn đang sử dụng máy tính Mac hoặc Linux, bạn có thể cần chạygem install rspec sử dụng lệnh sudo hoặc sử dụng một công cụ như HomeBrew hoặc RVM để cài đặt gem rspec.

Hello World

Để bắt đầu, chúng ta hãy tạo một thư mục (thư mục) để lưu trữ các tệp RSpec của chúng ta. Trong cửa sổ cmd.exe của bạn, nhập như sau:

cd \

Sau đó gõ -

mkdir rspec_tutorial

Và cuối cùng, gõ -

cd rspec_tutorial

Từ đây, chúng ta sẽ tạo một thư mục khác có tên là spec, hãy làm điều đó bằng cách gõ -

mkdir spec

Chúng tôi sẽ lưu trữ các tệp RSpec của chúng tôi trong thư mục này. Các tệp RSpec được gọi là "thông số kỹ thuật". Nếu điều này có vẻ khó hiểu đối với bạn, bạn có thể coi tệp đặc tả là tệp thử nghiệm. RSpec sử dụng thuật ngữ “spec” là một dạng viết tắt của “đặc tả”.

Vì RSpec là một công cụ kiểm tra BDD, mục tiêu là tập trung vào những gì ứng dụng làm và liệu nó có tuân theo một đặc điểm kỹ thuật hay không. Trong phát triển theo hướng hành vi, đặc tả thường được mô tả dưới dạng “Câu chuyện người dùng”. RSpec được thiết kế để làm rõ liệu mã đích có hoạt động chính xác hay không, nói cách khác là tuân theo đặc điểm kỹ thuật.

Hãy quay lại mã Hello World của chúng ta. Mở trình soạn thảo văn bản và thêm mã sau:

class HelloWorld

   def say_hello 
      "Hello World!"
   end
   
end

describe HelloWorld do 
   context “When testing the HelloWorld class” do 
      
      it "should say 'Hello World' when we call the say_hello method" do 
         hw = HelloWorld.new 
         message = hw.say_hello 
         expect(message).to eq "Hello World!"
      end
      
   end
end

Tiếp theo, lưu tệp này vào tệp có tên hello_world_spec.rb trong thư mục đặc tả mà bạn đã tạo ở trên. Bây giờ trở lại cửa sổ cmd.exe của bạn, chạy lệnh này -

rspec spec spec\hello_world_spec.rb

Khi lệnh hoàn tất, bạn sẽ thấy đầu ra giống như sau:

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

Xin chúc mừng, bạn vừa tạo và chạy thử nghiệm đơn vị RSpec đầu tiên của mình!

Trong phần tiếp theo, chúng ta sẽ tiếp tục thảo luận về cú pháp của tệp RSpec.