Skip to content

4.2.1 アプリケーションをテストする

k2works edited this page Feb 15, 2016 · 2 revisions

Step01:やることが登録できることをテストする

./spec/todo_spec.rb

 -  it 'does something useful' do
 -    expect(false).to eq(true)
 +  it 'やることが登録できる' do
 +    Todo::DB.prepare
 +    params = {name:'test',content:'contents'}
 +    Todo::Task.create!(name: params[:name], content: params[:content])
 +    expect(Todo::Task.all.count).to eq(1)
    end
   end

Step02:テストデータを削除する

./spec/todo_spec.rb

    it 'やることが登録できる' do
      Todo::DB.prepare
      params = {name:'test',content:'contents'}
 +    Todo::Task.where(params).delete_all
      Todo::Task.create!(name: params[:name], content: params[:content])
      expect(Todo::Task.all.count).to eq(1)
    end

Step03:タスクデータのCRUDをテストする

./spec/todo_spec.rb

 +  it 'やることが検索できる' do
 +    Todo::DB.prepare
 +    params = {name:'test',content:'contents'}
 +    Todo::Task.where(params).delete_all
 +    Todo::Task.create!(name: params[:name], content: params[:content])
 +    id = Todo::Task.where(params)[0].id
 +    task = Todo::Task.find(id)
 +    expect(task.name).to eq('test')
 +  end
 +
 +  it 'やることが更新できる' do
 +    Todo::DB.prepare
 +    params = {name:'test',content:'contents'}
 +    Todo::Task.where(params).delete_all
 +    Todo::Task.create!(name: params[:name], content: params[:content])
 +    id = Todo::Task.where(params)[0].id
 +    task = Todo::Task.find(id)
 +    task.name = 'test2'
 +    task.save
 +    expect(task.name).to eq('test2')
 +    Todo::Task.where(name:'test2').delete_all
 +  end
 +
 +  it 'やることが削除できる' do
 +    Todo::DB.prepare
 +    params = {name:'test',content:'contents'}
 +    Todo::Task.where(params).delete_all
 +    Todo::Task.create!(name: params[:name], content: params[:content])
 +    Todo::Task.where(params).delete_all
 +    expect(Todo::Task.all.count).to eq(0)
 +  end

Step04:テスト内容をグルーピングする

./spec/todo_spec.rb

+ describe 'DB' do
    it 'やることが登録できる' do
      Todo::DB.prepare
      params = {name:'test',content:'contents'}
      Todo::Task.where(params).delete_all
      Todo::Task.create!(name: params[:name], content: params[:content])
      expect(Todo::Task.all.count).to eq(1)
    end

    it 'やることが検索できる' do
      Todo::DB.prepare
      params = {name:'test',content:'contents'}
      Todo::Task.where(params).delete_all
      Todo::Task.create!(name: params[:name], content: params[:content])
      id = Todo::Task.where(params)[0].id
      task = Todo::Task.find(id)
      expect(task.name).to eq('test')
    end

    it 'やることが更新できる' do
      Todo::DB.prepare
      params = {name:'test',content:'contents'}
      Todo::Task.where(params).delete_all
      Todo::Task.create!(name: params[:name], content: params[:content])
      id = Todo::Task.where(params)[0].id
      task = Todo::Task.find(id)
      task.name = 'test2'
      task.save
      expect(task.name).to eq('test2')
      Todo::Task.where(name:'test2').delete_all
    end

    it 'やることが削除できる' do
      Todo::DB.prepare
      params = {name:'test',content:'contents'}
      Todo::Task.where(params).delete_all
      Todo::Task.create!(name: params[:name], content: params[:content])
      Todo::Task.where(params).delete_all
      expect(Todo::Task.all.count).to eq(0)
    end
+ end

Step05:グルーピング名の修正と共通事後タスクの追加

./spec/todo_spec.rb

 -  describe 'DB' do
  -    it 'やることが登録できる' do
  +  describe 'Task' do
  +    before(:each) do
         Todo::DB.prepare
  -      params = {name:'test',content:'contents'}
  -      Todo::Task.where(params).delete_all
  -      Todo::Task.create!(name: params[:name], content: params[:content])
  +      @params = {name:'test',content:'contents'}
  +      Todo::Task.create!(name: @params[:name], content: @params[:content])
  +    end
  +
  +    after(:each) do
  +      Todo::Task.where(@params).delete_all
  +    end
  +
  +    it 'やることが登録できる' do
         expect(Todo::Task.all.count).to eq(1)
       end
   
       it 'やることが検索できる' do
  -      Todo::DB.prepare
  -      params = {name:'test',content:'contents'}
  -      Todo::Task.where(params).delete_all
  -      Todo::Task.create!(name: params[:name], content: params[:content])
  -      id = Todo::Task.where(params)[0].id
  +      id = Todo::Task.where(@params)[0].id
         task = Todo::Task.find(id)
         expect(task.name).to eq('test')
       end
   
       it 'やることが更新できる' do
  -      Todo::DB.prepare
  -      params = {name:'test',content:'contents'}
  -      Todo::Task.where(params).delete_all
  -      Todo::Task.create!(name: params[:name], content: params[:content])
  -      id = Todo::Task.where(params)[0].id
  +      id = Todo::Task.where(@params)[0].id
         task = Todo::Task.find(id)
         task.name = 'test2'
         task.save
        expect(task.name).to eq('test2')
        Todo::Task.where(name:'test2').delete_all
       end
   
       it 'やることが削除できる' do
  -      Todo::DB.prepare
  -      params = {name:'test',content:'contents'}
  -      Todo::Task.where(params).delete_all
  -      Todo::Task.create!(name: params[:name], content: params[:content])
  -      Todo::Task.where(params).delete_all
  +      id = Todo::Task.where(@params)[0].id
  +      task = Todo::Task.find(id)
  +      task.destroy
         expect(Todo::Task.all.count).to eq(0)
       end
     end

Step06:状態を日本語にする(現行仕様の確認)

./spec/todo_spec.rb

+    context 'やることが登録されている場合' do
 +      it '初期値はNOT_YETである' do
 +        expect(Todo::Task.where(@params)[0].status_name).to eq('NOT_YET')
 +      end
 +
 +      it 'やりかけのタスクはPENDINGである' do
 +        id = Todo::Task.where(@params)[0].id
 +        wip = Todo::Task.find(id)
 +        wip.status = Todo::Task::PENDING
 +        wip.save
 +        expect(Todo::Task.where(@params)[0].status_name).to eq('PENDING')
 +      end
 +
 +      it '完了したタスクはDONEである' do
 +        id = Todo::Task.where(@params)[0].id
 +        wip = Todo::Task.find(id)
 +        wip.status = Todo::Task::DONE
 +        wip.save
 +        expect(Todo::Task.where(@params)[0].status_name).to eq('DONE')
 +      end
 +
 +    end

Step07:状態を日本語にする(プログラムの修正)

./lib/todo/task.rb

     # ステータスの名称と数値の組み合わせの値
      STATUS = {
 -        'NOT_YET' => NOT_YET,
 -        'DONE'    => DONE,
 -        'PENDING' => PENDING
 +        '未完了' => NOT_YET,
 +        '完了'    => DONE,
 +        'ペンディング' => PENDING
      }.freeze

Step08:状態を日本語にする(テストの修正)

./spec/todo_spec.rb

     context 'やることが登録されている場合' do
 -      it '初期値はNOT_YETである' do
 -        expect(Todo::Task.where(@params)[0].status_name).to eq('NOT_YET')
 +      it '初期値は' do
 +        expect(Todo::Task.where(@params)[0].status_name).to eq('未完了')
        end
  
 -      it 'やりかけのタスクはPENDINGである' do
 +      it 'やりかけのタスクは' do
          id = Todo::Task.where(@params)[0].id
          wip = Todo::Task.find(id)
          wip.status = Todo::Task::PENDING
          wip.save
 -        expect(Todo::Task.where(@params)[0].status_name).to eq('PENDING')
 +        expect(Todo::Task.where(@params)[0].status_name).to eq('ペンディング')
        end
  
 -      it '完了したタスクはDONEである' do
 +      it '完了したタスクは' do
          id = Todo::Task.where(@params)[0].id
          wip = Todo::Task.find(id)
          wip.status = Todo::Task::DONE
          wip.save
 -        expect(Todo::Task.where(@params)[0].status_name).to eq('DONE')
 +        expect(Todo::Task.where(@params)[0].status_name).to eq('完了')
        end
  
      end

Step09:テストコードのリファクタリング

./spec/todo_spec.rb

     it 'やることが登録できる' do
 -      expect(Todo::Task.all.count).to eq(1)
 +      expect(Todo::Task.where(@params).count).to eq(1)
      end
  
      it 'やることが検索できる' do
       id = Todo::Task.where(@params)[0].id
       task = Todo::Task.find(id)
       expect(task.name).to eq('test')
     end
 
     it 'やることが更新できる' do
       id = Todo::Task.where(@params)[0].id
       task = Todo::Task.find(id)
        task.name = 'test2'
        task.save
        expect(task.name).to eq('test2')
 -      Todo::Task.where(name:'test2').delete_all
 +      task.name = 'test'
 +      task.save
      end
  
      it 'やることが削除できる' do
        id = Todo::Task.where(@params)[0].id
        task = Todo::Task.find(id)
        task.destroy
 -      expect(Todo::Task.all.count).to eq(0)
 +      expect(Todo::Task.where(@params).count).to eq(0)
      end
Clone this wiki locally