Question 모델 Spec 추가 & 컨트롤러 Spec 추가

### 1. Question 사용하지 않는 FactoryGirl 제거 ###

- shoulda-matcher를 활용하였기에, answer를 추가하는 Question FactoryGirl 부분은 삭제함.

**spec/factories/questions.rb**

    factory :question_with_answers do
      ignore do
        answers_count 1
      end
    
      after(:create) do |question, evaluator|
        create_list(:answer, evaluator.answers_count, question: question)
      end
    end

<br/>
### 2. Question : plaza 관계 추가 ###

- (post 모델과 동일하게) question 모델에 after_create filter로 plaza 생성.

**app/models/question.rb**

    after_create :set_plaza_question
    private
      def set_plaza_question
        self.create_plaza
      end

- question 모델 spec에 spec 추가

**spec/models/question_spec.rb**

    it "> has_one :plaza, dependent: :destroy" do
      expect(create(:question)).to have_one(:plaza).dependent(:destroy)
    end

<br/>
### 3. Question FactoryGirl 사용하지 않는 코드 삭제 ###

    after(:create) do |question|
      question.plaza = create(:plaza_question, postitable_id: question.id, postitable_type: "question")
    end

<br/>
### 4. Question 컨트롤러 생성 ###

    rails g controller questions

생성된 파일
> app/controllers/questions_controller.rb
> spec/controllers/questions_controller_spec.rb

<br/>
### 5. Question 컨트롤러 Spec 추가 ###

Source 참조

<br/>
### 6. Question 컨트롤러 메소드 생성 ###

- index
- show
- create
- update
- destroy

<br/>
### 7. Question 컨트롤러 route 추가 ###

>config/routes.rb

    resources :questions, only: [ :index, :show, :create, :update, :destroy ]

<br/>
### 8. Question 컨트롤러 메소드별 instance 할당 ###

TODO : (임시로 authenticate를 skip함) authenticate 추가

    skip_before_filter :authenticate_user!

    before_action :set_question, only: [:show, :update, :destroy]
    
    private
      def set_question
        @question = Question.find(params[:id])
      end

<br/>
### 9. Question 컨트롤러 Spec 적용(index, show, destroy) ###

    expect(assigns(:question)).to eq question

- get, post, update, delete
- assigns 메소드 : 컨트롤러 메소드에 의해 생성된 instace를 지칭할 수 있음.

<br/>
### 10. Question 컨트롤러 Spec 추가(create) ###

    expect {
      post :create, { question: attributes_for(:question) }
    }.to change(Question, :count).by(1)

- create 메소드는 before/after의 상태가 필요하기에 actual 부분을 block 형태로 전달함.
- attributes_for : FactoryGirl의 모델을 Hash 형태로 생성함(params에 Hash로 추가하기 위해).

<br/>
### 11. Question 컨트롤러 Spec 추가(update) ###

    question.reload

- reload를 해야지만, update가 됨

<br/>
### 12. Question 컨트롤러 Spec 리팩토링 ###

- 일부 리팩토링