項目環(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é)再講吧