16. turnip による受入テスト(2)

途中になってしまったので、受入テストの続きを行う。デザインに関しては後で設定することとして、とりあえず動く実装を作る。まず、app/views/teacher/kyoumus/index.html に年度変更のリンクを設置する。

%h2 年度に関する情報
%table
  %tr
    %th リンク
    %th 内容
    %th 権限
  %tr
    %th= link_to '[年度変更]', teacher_years_path
    %td 処理年度を変更します。
    %td 教務室

この結果、以下のようなエラーになる。
Failure/Error: 前提 教務室でログインする
ActionView::Template::Error:
undefined local variable or method `teacher_years_path' for #<#:0x007f9ac186a9d0>

teacher_years_path を作成するため、controller を generate する。

$ bin/rails g controller teacher/years
      create  app/controllers/teacher/years_controller.rb
      invoke  haml
      create    app/views/teacher/years
      invoke  rspec
      create    spec/controllers/teacher/years_controller_spec.rb
      invoke  assets
      invoke    coffee
      invoke    scss

また、config/routes.rb に resources を追加する。

  namespace :teacher do
    resources :years, only: [ :index, :create, :show, :update ]

Guard は以下のようになる。

    # No such step: '[年度変更]リンクをクリックする'
    # ./spec/acceptance/features/kyoumu_years.feature:6

step がないので、この step を追加しておく。

# リンクをクリック (textはリンク文字列かid)
# 同じ名前のリンクが複数ある場合には文字列は指定できない
step %(:textリンクをクリックする) do |text|
  click_link text
end

step については、[http://techracho.bpsinc.jp/hachi8833/2014_06_26/18068:title=[RSpec][Turnip] 一般的に使えるTurnipステップ集]に便利な一覧が載っているので common.rb に登録しておく。

この結果、Guard は以下のようになる。

     Failure/Error: もし "[年度変更]"リンクをクリックする
     AbstractController::ActionNotFound:
       The action 'index' could not be found for Teacher::YearsController

権限関係は後で記述することにし、取り急ぎテストが通る実装を作成する。spec/controllers/teacher/years_controller_spec.rb は以下のようになる。

RSpec.describe Teacher::YearsController, :type => :controller do

  describe "GET index" do
    it "returns http success" do
      get :index      
      expect(response).to have_http_status(:success)
    end
  end
end

続いて、app/controllers/teacher/years_controller.rb に index を作成する。

  def index
  end

さらに、app/views/teacher/years/index.html.haml を以下のように記述する。

%h1 年度一覧

この結果、テストはすべて通過する。

年度の追加、変更
  教務室のトップページから年度変更に飛び、新規年度を作成し、年度を変更する
    前提教務室でログインする -> ならば"[年度変更]"と表示されていること -> もし"[年度変更]"リンクをクリックする -> ならば年度一覧と表示されていること

実際の年度変更処理を書きたいところだが、権限周りがまだ未実装部分が多いため、この受入テストは一端中断する。

今日はここまで。

written by iHatenaSync