0

いくつかの仕様を書いているときにエラーが発生しました

QuestionsController GET #edit finds question to edit
     Failure/Error: Question.should_receive(:find).with("#{question.id}").and_return(question)
   (<Question(id: integer, title: string, body: text, created_at: datetime, updated_at: datetime, user_id: integer, up_votes: integer, down_votes: integer) (class)>).find("9")
       expected: 1 time
       received: 2 times

class QuestionsController < ApplicationController
  def edit
    @question = Question.find(params[:id])
  end
end

仕様/コントローラー/questions_spec.rb

  describe QuestionsController do
    describe 'get edit' do
      it 'finds question to edit' do
        question = create(:question)
        user = create(:user)
        sign_in user
        Question.should_receive(:find).and_return question
        get :edit, :id => question.id
      end
      it 'renders edit template' do 
        question = create(:question)
        user = create(:user)
        sign_in user
        Question.stub(:find).and_return question
        get :edit, :id => question.id
        expect(responce).to render_template 'edit'
      end
    end
  end

Rspec、Factory Girl、database_cleaner、Postgres を使用しています

spec_helper の database_cleaner 設定

  config.before(:suite) do
    DatabaseCleaner.clean_with :truncation
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each) do |group|
    # The strategy needs to be set before we call DatabaseCleaner.start
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end
  config.use_transactional_fixtures = false

編集アクションをテストしています。最初の例で find を受け取り、2 番目にスタブの find メソッド呼び出しを受け取るように Question に期待を設定します。最初の例でエラーが発生しました。これら 2 つの例は互いに完全に分離されていないと思います。

4

1 に答える 1

1

PUT リクエストを行う必要があります。

put :edit, id: question.id
于 2013-07-14T21:44:54.967 に答える