0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

実装するにあたり、テストを記述したのち、処理をコーディングする

Last updated at Posted at 2020-08-24

背景

現場でのあるあるですが、普段は以下の流れで開発を進めることが多いと思います。
(1)設計→(2)処理のコーディング→(3)テストのコーディング→(4)単体テストなど…

しかし、Railsチュートリアルでは、
(1)設計→(2)テストのコーディング→(3)処理のコーディング…
という流れで解説されていました。自分も少し勉強になったので、記事として掲載しようと思います。

環境

項目 内容
OS aws #35-Ubuntu SMP(Cloud9)
Ruby ruby 2.6.3p62 (2019-04-16 revision 67580)
Ruby On Rails Rails 6.0.3

対応

以下は、ルーティング、コントローラが設定されているアプリに、新たにabout(概要)ページを追加する場合、テストソースからコーディングする例です。

config/route.rb
Rails.application.routes.draw do
  get 'static_pages/home'
  get 'static_pages/help'
  root 'static_pages#home'
※概要ページのルーティングはまだ設定されていません。
end
app/controller/static_pages_controller.rb
class StaticPagesController < ApplicationController
  def home
  end

  def help
  end
   
※概要ページのアクションはまだ設定されていません。
end

手順1)ここで、新たに追加するページに対するテストを予め記述しておきます。

test/static_pages_controller_test.rb
require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest
1   
2   test "should get home" do
3     get static_pages_home_url
4     assert_response :success
5   end
6 
7   test "should get help" do
8     get static_pages_help_url
9     assert_response :success
10  end
11
12 ~~~~ ここから想定で概要ページのテストを記入する。~~~~
13  test "should get about" do
14    get static_pages_about_url
15    assert_response :success
16  end

end 

手順2)テストを実行してみる(1回目=まだ処理を記述していないのでエラーになる)

$rails test

Error:
StaticPagesControllerTest#test_should_get_about:
NameError: undefined local variable or method `static_pages_about_url' 
..

Finished in 2.157942s, 1.3902 runs/s, 0.9268 assertions/s.
3 runs, 2 assertions, 0 failures, 1 errors, 0 skips

エラーが出てしまいました。

手順3)上記から、パスが通っていないので、ルーティングを見直します。

config/route.rb
Rails.application.routes.draw do
  get 'static_pages/home'
  get 'static_pages/help'
  get 'static_pages/about'  ←ここを追加した☆
  root 'static_pages#home'
end

手順4)テストを実行する(2回目=想定ではエラーになる)

$ rails test

Error:
StaticPagesControllerTest#test_should_get_about:
AbstractController::ActionNotFound: The action 'about' could not be found for StaticPagesController…
3 runs, 2 assertions, 0 failures, 1 errors, 0 skips

またエラーが出てしまいました。

手順5)上記エラーから、アクションが原因なのでコントローラを見直します。

app/controller/static_pages_controller.rb
class StaticPagesController < ApplicationController
  def home
  end

  def help
  end

  def about   ←ここを追加した☆
  end

end

手順6)さらにテストを実行してみる(3回目=どうなるか…)

$ rails test

Error:
StaticPagesControllerTest#test_should_get_about:
ActionController::MissingExactTemplate: StaticPagesController#about is missing a template for request formats: ..
3 runs, 2 assertions, 0 failures, 1 errors, 0 skips

またエラーが出てしまいました。次はまた文言が違うようです…

手順7)上記エラーから、テンプレートが原因のようなのでビューを追加します。

touch app/views/static_pages/about.html.erb

手順8)テストを実行する(4回目=正常テストパス)

$ rails test

...
3 runs, 3 assertions, 0 failures, 0 errors, 0 

上手くいきました…基本中の基本ですが、リファクタリングを含めておさえておくべき内容だと感じました。

参考文献

チュートリアル.テストから始める

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?