撰寫自動化測試是寫程式非常重要的一環,在 Ruby 裡有許多的測試框架,但最多人推崇的非 RSpec 莫屬。
關於 RSpec 的介紹,可以參考:
- 石頭閒語 - RSpec 與測試驅動開發的思考方式
- RSpec 讓你愛上寫測試(這篇講的比較細)
但若要完成整合測試,光靠 RSpec 可能還是有點不足,這時我們可以配合 Capybara 做更完整的測試。
Capybara 會偷開 Server (rails server),然後讓測試程式真的訪問我們所寫的 Web,因此所得到的互動結果是真實發生的狀況。
這個網站有非常清楚關於 RSpec 與 Capybara 的教學
http://opinionated-programmer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/
實際寫起來可以像這樣
#encoding: utf-8
require 'spec_helper'
describe '活動頁面' do
it '第一次進入此頁面,應該跳轉至註冊頁面' do
visit '/campaigns'
page.current_url.should =~ %r(http://[^/]+/sign_up)
end
it '實際註冊後,應該跳轉至登入頁面' do
visit '/sign_up'
fill_in 'user_email', :with => 'root@example.com'
fill_in 'user_password', :with => 'root'
fill_in 'user_password_confirmation', :with => 'root'
click_on '註冊'
page.current_url.should =~ %r(http://[^/]+/log_in)
end
end
看了上面的例子,像不像在寫 spec 一樣呀?其實這個 spec 是可以拿來測試的喔!
其它
如果需要指定測試 Server 開啟在指定 port 的話,可以下達以下指令
Capybara.server_port = 3000
要回到 random port 的話,那麼可以…
Capybara.server_port = nil
2011/9/28 更新
記得把測試資料夾設定成 ./spec/requests/*_spec.rb,或是在每個測試項目加上「:type => :request」。如果資料夾不這麼命名,那就不會默認有「:type => :request」這個設置…成立一個新專案,要建置測試時出錯,找了一天才找到解法…
it 'xxxxxxxxxxxxx', :type => :request do
# ......
end
參考資料
沒有留言:
張貼留言