接下來我們要來建立測試檔囉
我們目前在開發以 Rack 為基底的套件
使用 rack-test 會讓測試更方便
到 gemspec 加入下列兩個測試工具
spec.add_development_dependency "rack-test"
spec.add_development_dependency "minitest"
web小辭典
▶ rack-test: 輕量又簡單的 Rack 測試 API,可使用 cookie jar 傳送request、持續傳送 request等
▶ minitest: 輕量又快速的測試框架,提供豐富的斷言
(斷言指的是測試的判斷結果),讓測試結果簡單又好讀
只要 gemspec 有做修改
就要用 bundle install
避免剛加入的套件沒加到
# /rainbow
> mkdir test
> cd test
# /rainbow/test
> test_helper.rb
做測試會需要用到測試工具
接下來我們就把 rack/test 跟 minitest 這兩個測試工具載入
語法解釋
▶ LOAD_PATH 是 Ruby 用來存放檔案路徑的模組
當接收到 request 請求時
Ruby 就會去搜尋同樣名字的檔案並載入
▶ expand_path 會把相對路徑轉換成絕對路徑,當檔案有任何變動時,比較不會找錯檔案
▶ FILE 會把前面參數的路徑完整秀出來
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
require "rulers"
require "rack/test"
require "minitest/autorun"
# /rainbow/test/application_test.rb
# 從資料夾中確認是否有 test_helper,而不採用 LOAD_PATH 去找
require_relative "test_helper"
class TestApp < Rulers::Application
end
class RulersAppTest < Minitest::Test
include Rack::Test::Methods
def app
TestApp.new
end
def test_request
get "/"
assert last_response.ok?
body = last_response.body
assert body["Hello"]
end
end
> ruby test/application_test.rb
# Running:
.
Finished in 0.019610s, 50.9944 runs/s, 101.9888 assertions/s.
1 runs, 2 assertions, 0 failures, 0 errors, 0 skips
我們目前使用的是 Ruby 內建的 server(WEBRick)
但預設的 WEBRick 並不會同步改變顯示畫面
所以每次變更都要重啟 server
我們可以用其他 Application Server 代替
Unicorn 會自動去尋找 config.ru 檔並建立起 server
我們就來用 Unicorn 吧
安裝 Unicorn
> gem install unicorn
Fetching unicorn-6.1.0.gem
Fetching kgio-2.11.4.gem
Fetching raindrops-0.20.0.gem
Building native extensions. This could take a while...
Successfully installed kgio-2.11.4
....
3 gems installed
unicorn -p 3001
web小辭典
▶ Application Server: 在傳送 HTTP request 時,用來安裝、運作、執行應用程式的服務
▶ HTTP request 流程圖
一開始安裝 rainbow 時
會送給我們一個 .gitignore 檔
.gitignore 檔 主要是收錄不想進版控的檔案
舉凡金鑰、套件的檔案(rainbow-0.0.1.gem)
rainbow-*.gem