新建 Rails項目 RSpec測試

項目環(huán)境:Linux

Rails 4.0.0

Ruby 2.3.1p112?

gem :2.7.5

Bundler version 1.16.1

非關(guān)系型數(shù)據(jù)庫:mongoDB

現(xiàn)在開始創(chuàng)建第一個項目。


接下來以Patient? Model為例。


創(chuàng)建一個目錄,執(zhí)行:


mkdir rails_test


切換到rails_test目錄,執(zhí)行


cd rails_test


1、創(chuàng)建名為patient的項目,執(zhí)行:


rails new patient


接下來會創(chuàng)建一系列的文件和依賴包。出現(xiàn) Bundle complete!時說明已經(jīng)創(chuàng)建成功了,接下來執(zhí)行下一步。

2、查看我們所創(chuàng)建的項目,理解目錄文件所代表的意思:

-- app 文件夾是我們的要操作的核心文件夾,按照一般的,我們分為:

-- -- assets 是我們前端頁面存放js,css等所需要的文件夾。

-- -- controllers 是MVC架構(gòu)中的控制層(C),負責路由轉(zhuǎn)發(fā)接受前端傳值等操作。

-- --?helpers 是幫助文檔

-- --?mailers?郵件處理

-- -- models 是MVC中的模型層(M),負責數(shù)據(jù)處理包括格式,類型等操作。存入數(shù)? ? ? ? ? ? ? ? ? ? ?據(jù)庫的持久化操作。

-- -- views 是MVC中的視圖層(V),是前端代碼邏輯。這里我們不去關(guān)注,接下? ? ? ? ? ? ? ? ? ? ?來再去深究。

其余的目錄我大概簡介一下就好啦。需要詳細了解的問我,今天的主題不在這些基礎(chǔ)上。

-- bin #rails腳本

-- config/ #路由、數(shù)據(jù)庫等

-- db/?? #數(shù)據(jù)庫模式、遷移文件

-- lib/? #擴展模塊

-- log/? #日志

-- public/ #公共資源

-- test/? #單元測試

-- config.ru #Rack服務(wù)器的程序設(shè)置、用于啟動程序

-- Gemfile,Gemfile.lock #指定Gem依賴,用于bundler gem

--? Rakefile #保存并加載可在命令行中執(zhí)行的任務(wù),可添加任務(wù)在lib/tasks中

3、利用vi編輯器修改Gemfile 文件,添加mongoDB所支持的gem。執(zhí)行:vi Gemfile ,

添加:


????????????gem 'mongoid'?

????????????gem 'execjs'

????????????gem 'therubyracer',:platforms =>:ruby


版本不清楚的情況下,最好不要寫上版本號,讓bundle 執(zhí)行自動匹配,Rails 支持 mongoid 是5.0.0版本。添加成功之后按ESC ,接著執(zhí)行:


?:wq?


保存退出。

4、執(zhí)行


bundle install


注意這里,執(zhí)行如果出錯的話,打開Gemfile 將源中https改寫成http保存退出成功。

5、接下來我們通過命令在config下新建一個mongoid.yml文件,執(zhí)行?


rails generate mongoid:config


創(chuàng)建成功,但是注意,如果不添加execjs,therubyracer的話找不到JavaScript就會創(chuàng)建失敗。

6、


vi mongoid.yml


文件,修改數(shù)據(jù)庫名,把localhost改成自己的IP,在Linux下通過ifconfig命令查看自己的IP ,數(shù)據(jù)庫名修改為:patient。保存退出。

7、我們同時加入RSpec測試,vi Gemfile? 打開輸入如下內(nèi)容:


group :development, :test do

gem 'rspec-rails'?

gem 'factory_girl_rails'

end

group :test do

gem 'faker'

gem 'capybara'

gem 'launchy'

gem 'database_cleaner'

gem 'selenium-webdriver'

end


保存退出。

8、打開config/application.rb 文件,輸入如下:


config.generators do |g|

? ? ? g.test_framework :rspec,

? ? ? fixtures: true,

? ? ? view_specs: false,

? ? ? controller_specs: false,

? ? ? routing_specs: false

g.fixture_replacement :factory_girl,dir:"spec/factories"

end


保存退出。

9、做好創(chuàng)建測試程序的準備之后,我們需要創(chuàng)建一個名為spec的文件夾,該文件夾就是我們測試需要用到的,結(jié)構(gòu)和app文件夾結(jié)構(gòu)差不多,直接執(zhí)行


rails generate rspec:install


?文件夾就創(chuàng)建成功了。后面用到。

10、這里比較懶,我們通過腳手架創(chuàng)建一個j簡單到只有兩個屬性的rails項目。手動創(chuàng)建的話請聽下回分解。執(zhí)行


rails g scaffold patient name:string sex:string


看到創(chuàng)建了一大堆的文件說明創(chuàng)建成功。先看一下成果吧,不過在啟動服務(wù)之前,我們先通過后臺添加一個數(shù)據(jù)。

11、執(zhí)行:rails c 進入控制臺,查看我們的模型是否存在,直接執(zhí)行


? Patient


如果存在則返回一模一樣的值,否則報錯。我直接執(zhí)行持久化操作,執(zhí)行


Patient.create({:name=>"za",:sex =>"f"})


OK,添加數(shù)據(jù)成功,接下來見證奇跡了。

12、執(zhí)行:rails s 啟動服務(wù) 地址欄輸入:http://localhost:3000/patients??吹轿覀冎皠?chuàng)建的模型就展示出來了。


并且CRUD都給你創(chuàng)建好了。直接執(zhí)行就好啦。這就是腳手架的方便之處。

13、關(guān)閉服務(wù)。我們啟動測試程序,執(zhí)行


?rspec


出現(xiàn)10 examples, 0 failures等字樣并且不是紅色就說明我們的測試就成功了。

14、添加一個模型驗證,在 Patient模型里面添加非空驗證,代碼如下


validates_presence_of :name , :message=> "病人姓名不能為空"


接下來我們測試用戶名為空是否能通過?注意測試程序的名字都是model_spec.rb,對應(yīng)的我們找到spec/models/patient_spec.rb文件,用vi編輯器打開,添加如下代碼:


it"病人姓名為空 "do

? ? ? ? expect(Patient.new).to be_valid

end


再一次執(zhí)行:rspec 發(fā)現(xiàn)報錯了,說明測試成功啦。


那怎樣讓錯誤的程序測試成功?下節(jié)再講吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 話說昨日,健哥讓我分享下怎么用rspec寫模型的測試,頓時一臉懵逼,因為只會些拳腳貓功夫,趕緊百度谷歌相關(guān)知識,七...
    嚴三金閱讀 4,560評論 2 52
  • 這是一個簡單的關(guān)于Rails Rspec的簡單的介紹 1 安裝Rspec 在Rails的配置文件Gemfile配置...
    AQ王浩閱讀 27,182評論 6 28
  • 加速測試的方法 這里所說的“速度”有兩層含義。 其一,當然是測試運行所用的時間。我們這個小程序的測試已經(jīng)開始出現(xiàn)慢...
    AQ王浩閱讀 1,021評論 0 1
  • 加速測試的方法 這里所說的“速度”有兩層含義。 其一,當然是測試運行所用的時間。我們這個小程序的測試已經(jīng)開始出現(xiàn)慢...
    AQ王浩閱讀 2,631評論 1 9
  • 配置 測試/調(diào)試 環(huán)境 一本沒有測試相關(guān)內(nèi)容的 Ruby 的書不是完整的。如果你對發(fā)布和貢獻開源項目感興趣的話,社...
    編程青年閱讀 2,459評論 1 8

友情鏈接更多精彩內(nèi)容