冷やし中華始めました風ですが。。。
Azure DevOpsでチケット駆動にはしていますが、テストは実装後に書いてました。
テスト駆動はその名の通り、テストを先に書いて、テストが通るように実装して行く流れです。
個人的な見解ですが、実装が先だと動いた事で、満足してしまいテストを書くのが苦痛に。または、スケジュールを優先して後回しにし、検証工程でバグだらけで疲弊するなんてのも、あるあるですね。
テストが先になる事で、手動で何回も確認していた時間が短縮できそうという期待もあるので継続して行こうと思っています。
テスト修正
今回の課題は簡単ですが、scaffoldしたコントローラーから詳細と削除を廃止します。
先ずは、正しく落ちる事を確認してから修正する流れ。
spec/routing/spaces_routing_spec.rb を変更
it 'routes to #show' do - expect(get: '/spaces/1').to route_to('spaces#show', id: '1') + expect(get: '/spaces/1').not_to be_routable end
it 'routes to #destroy' do - expect(delete: '/spaces/1').to route_to('spaces#destroy', id: '1') + expect(delete: '/spaces/1').not_to be_routable end
spec/requests/spaces_spec.rb の下記を削除
- describe 'GET /show' do - it 'renders a successful response' do - space = Space.create! valid_attributes - get space_url(space) - expect(response).to be_successful - end - end
- describe 'DELETE /destroy' do - it 'destroys the requested space' do - space = Space.create! valid_attributes - expect do - delete space_url(space) - end.to change(Space, :count).by(-1) - end - - it 'redirects to the spaces list' do - space = Space.create! valid_attributes - delete space_url(space) - expect(response).to redirect_to(spaces_url) - end - end
spec/views/spaces/show.html.erb_spec.rb を削除
$ rspec Failures: 1) SpacesController routing routes to #show Failure/Error: expect(get: '/spaces/1').not_to be_routable expected {:get=>"/spaces/1"} not to be routable, but it routes to {:controller=>"spaces", :action=>"show", :id=>"1"} # ./spec/routing/spaces_routing_spec.rb:14:in `block (3 levels) in <main>' 2) SpacesController routing routes to #destroy Failure/Error: expect(delete: '/spaces/1').not_to be_routable expected {:delete=>"/spaces/1"} not to be routable, but it routes to {:controller=>"spaces", :action=>"destroy", :id=>"1"} # ./spec/routing/spaces_routing_spec.rb:34:in `block (3 levels) in <main>' 219 examples, 2 failures, 8 pending
予定通り、落ちます。
実装修正
config/routes.rb
- resources :spaces + resources :spaces, only: [:index, :new, :edit, :create, :update]
$ rspec spec/routing/spaces_routing_spec.rb 8 examples, 0 failures
予定通り、通りますが。。。
showとdestroyを削除
使われないものが残っていると保守性が下がるんので、不要なものを消しておきます。
app/controllers/spaces_controller.rb の下記変更と削除
- before_action :set_space, only: [:show, :edit, :update, :destroy] + before_action :set_space, only: [:edit, :update]
- # GET /spaces/1 - # GET /spaces/1.json - def show; end
- # DELETE /spaces/1 - # DELETE /spaces/1.json - def destroy - @space.destroy - respond_to do |format| - format.html { redirect_to spaces_url, notice: 'Space was successfully destroyed.' } - format.json { head :no_content } - end - end
app/views/spaces/show.html.erb をファイルごと削除
showとdestroyへのリンク削除
遷移するとエラーになるので、消しておきます。
app/views/spaces/index.html.erb
- <th colspan="3"></th> + <th></th>
- <td><%= link_to '詳細', space %></td> <td><%= link_to '編集', edit_space_path(space) %></td> - <td><%= link_to '削除', space, method: :delete, data: { confirm: 'Are you sure?' } %></td>
動作確認
$ rails s -> http://localhost:3000/
最終チェック
Railsコマンドメモ:push前に にも記載
$ rspec 219 examples, 0 failures, 8 pending $ rubocop 85 files inspected, no offenses detected $ yard Files: 26 Modules: 4 ( 4 undocumented) Classes: 23 ( 23 undocumented) Constants: 0 ( 0 undocumented) Attributes: 0 ( 0 undocumented) Methods: 8 ( 0 undocumented) 22.86% documented $ open doc/index.html $ brakeman No warnings found
【参考】ここまでのコミット内容
https://dev.azure.com/nightonly/rails-app-origin/_git/rails-app-origin/commit/0c314c8b37d5d6a0eb8c7b30caf3260b1d755d96