冷やし中華始めました風ですが。。。
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').to_not be_routable
     end
     it 'routes to #destroy' do
-      expect(delete: '/spaces/1').to route_to('spaces#destroy', id: '1')
+      expect(delete: '/spaces/1').to_not 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').to_not 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').to_not 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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です