測試應用與非人類用戶的交互,涵蓋外部 API git
7.1request test vs feature test github
對 RSpec 來講,這種專門針 對 API 的測試最好放在 spec/requests 目錄中,與前面編寫的功能測試分開。web
這種測試也不使用 Capy- bara,由於它模擬的是瀏覽器交互,而不是程序交互。json
咱們要使用的是前面測試控制器響應的 HTTP 動 詞:get、post、delete 和 patch。 api
end-point:端點。 瀏覽器
7.2測試GET請求 ruby
向API請求數據。session
請求測試與控制器測試不通的地方在於,可使用應用的任何路由。app
bin/rails g rspec:request projects_api post
create spec/requests/projects_apis_spec.rb
#調試:看看response.body是什麼。一個array,包含了登錄用戶的projects的信息.
[{"id":2,"name":"Second Sample Project","description":"A test project.","due_on":"2018-05-26","created_at":"2018-05-19T07:30:14.169Z","updated_at":"2018-05-19T07:30:14.169Z","user_id":1}]
#調試:轉化爲json ,: 變爲 =>
[{"id"=>2, "name"=>"Second Sample Project", "description"=>"A test project.", "due_on"=>"2018-05-26", "created_at"=>"2018-05-19T07:30:14.169Z", "updated_at"=>"2018-05-19T07:30:14.169Z", "user_id"=>1}]
#最後,解析第二次請求返回的JSON數據。看看是否match.
通常從web上response的數據格式是string,這個數據又是用JSON模式寫的,則可使用parse().
Parsse the data with JSON.parse(), and the adta becomes a JavaScript object.
7.3 測試POST 請求
向API發送POST請求。
{:name=>"Project 1", :description=>"A test project.", :due_on=>Sat, 26 May 2018 08:22:01 UTC +00:00}
#向API發送POST請求。須要傳遞身份驗證,項目相關屬性。
# response.body: {"status":"created"}
# response.header:
7.4 把控制器測試替換爲請求測試
要點:把控制器測試中的HTTP VERB 後的:create等方法改成相對路徑
post :create改成post projects_path
另外:
與 API 的控制器不一樣,這些控制器動做使用標準的電子郵件和密碼驗證身份
2.而後,在spec/rails_helper.rb文件中讓Devise把輔助方法應用到請求測試中。
RSpec.configure do |config|
...
config.include Devise::Test::ControllerHelpers, type: :controller
config.include RequestSpecHelper, type: :request
end
7.5 小結
redirect_to 能夠用在請求測試,
have_http_status 能夠用在feature,request 人, controller測試。
具體見https://www.rubydoc.info/gems/rspec-rails/frames#redirect_to