1. 程式人生 > >第三天,Ruby on Rails,腳手架的應用,自動化測試

第三天,Ruby on Rails,腳手架的應用,自動化測試

2018年12月1日

一、腳手架應用

我這次換了新版本的ruby環境,2.5.3

換源,並設定ruby2.5.3為預設版本

$ gem source --add https://gems.ruby-china.com/ --remove https://rubygems.org/
$ rvm use 2.5.3 --default

新建一個專案

$ rails new toy_app
$ cd toy_app
$ bundle install 

記得在 $ bundle install之前修改Gemfile檔案,把對應想要用到的gem包及具體版本加進去,如果有不想用的,就使用命令

$ gem install without 不想安裝的gem包名

把對應包加入Gemfile.lock檔案。

建好專案後可以先初始化倉庫,commit,並push到遠端端,然後部署到heroku

$ git init
$ git add -A
$ git commit -m "Initialize repository"
$ git remote add origin https://gitee.com/your name/your repository.git
$ git push -u --all

$ heroku create
$ git push heroku master

然後我們就要用到腳手架來快速搭建一個User模型,包含兩個欄位,name和email:

$ rails generate scaffold User name:string email:string

然後遷移資料庫,建一個User表:

$ rails db:migrate #rails5以上版本使用命令
$ rake db:migrate #rails舊版本命令

執行之後就可以看到資料庫新建了一個User表,並且已經可以訪問對應頁面了。執行$ rails server,然後在瀏覽器輸入localhost:3000/users,就可以看到使用者介面了。rails已經為我們自動建立了增刪改查的功能,非常方便。

如果想要刪除這個User模型,就用destroy命令,destroy命令是和generate相反的命令:

$ rails destroy model User

接著建一個micropost資源用來給使用者發微博。

$ rails generate scaffold Micropost content:text user_id:integer
$ rails db:migrate

再執行就可以看到localhost:3000//microposts頁面了,同樣有增刪改查功能:

接下來可以給微博新增一些驗證資訊,比如說最長不超過40字元,在app/models/micropost.rb裡面新增一句話

class Microposts < ApplicationRecord
  validates :content,length:{maximum:40}
end

如果輸入字元太多就會報錯:

接下來的內容我就不仔細講了,參考書Ruby on Rails Tutorial(Michael Hartl)

記得每次做完提交一下,再推送到遠端倉庫。

腳手架雖然方便快捷,但是好多封裝好的東西都沒有真正理解,沒有測試沒有驗證,所以初學者不要被它迷惑了,還是要紮紮實實的學基礎,如果不用腳手架也可以實現腳手架的所有功能,你就不用再看這些教程了。

二、自動化測試

測試可以避免迴歸問題,減少查詢問題的時間,rails在新建專案時已經為我們做了一個測試模組,只需要改動/test資料夾裡的.rb檔案即可,然後執行測試$ rails test完成測試。下面我們新建一個專案sample_app,再建兩個靜態頁面做測試

$ rails new sample_app
$ sample_app 
$ bundle install
$ rails generate controller StaticPage home help
$ git add -A
$ git commit -m "Add a static page"
$ git push

然後開啟sample_app/test/controllers/static_page_controller_test.rb檔案,模仿home和help寫一個about頁面的測試,然後執行 $ rails test,這時肯定會報錯,提示你在跟路由中沒有找到about,這時,修改/config/routers.rb檔案

Rails.application.routes.draw do
  get 'static_page/home'
  get 'static_page/help'
  get 'static_page/about'
end

再次執行$ rails test,仍報錯,提示沒有找到about方法,這時修改sample_app/app/controllers/static_page_controller.rb檔案

class StaticPageController < ApplicationController
  def home
  end

  def help
  end

  def about
  end

end

再次執行$ rails test,仍報錯,提示缺少template檔案,此時,就是最後一步,在/sample_app/app/views/static_page/目錄下新建一個檔案about.html.erb,參考home和help的程式碼,複製過來修改一下內容,再次執行$ rails test ,就顯示全部test通過了,此時訪問localhost:3000/static_page/about,顯示出頁面則測試成功。就是一個完整的自動化測過程,先建立測試,再根據錯誤提示一步步的修改,增添檔案,最後直到測試全部通過。

這次寫的過程比較粗略,基本都是書上有的我就沒寫,有什麼問題歡迎留言,共勉!